21

我注意到,在我使用 Django 注册登录后,它会将我重定向到accounts/profile/. 默认情况下 Django 注册url.py不处理accounts/profile/,所以我需要创建自己的。

其实这个问题是三方面的:

  1. 为什么登录后会重定向到accounts/profile/?有没有办法改变它?最好在成功登录后,我希望 Django 重定向回登录页面之前的页面。
  2. 如果我要创建自己的视图和模板accounts/profile/,那么我应该把它放在哪里?Django的内置usersauth_userview.py
  3. 还是Django 配置文件实际上会处理整个account/profiles/事情?我已经用我自己的扩展了 Django 的UserUserProfile,但它更像是User表格的附加字段,而不是实际的“个人资料”(我没有创建头像或类似的东西,只是简单的东西,比如地址和电话号码,但最重要的是,一些我的应用所依赖的自定义用户类型)。
4

3 回答 3

15

为什么登录后会重定向到accounts/profile/?有没有办法改变它?最好在成功登录后,我希望 Django 重定向回登录页面之前的页面。

只需更改设置LOGIN_REDIRECT_URL

如果我要为帐户/个人资料/创建自己的视图和模板,那么我应该把它放在哪里?Django 的内置用户 (auth_user) 在项目内的所有 Django 应用程序之间共享,所以我应该将 view.py 放在项目文件夹中而不是 app 文件夹中吗?

我喜欢在每个项目中创建一个名为“project_specific”的应用程序。这就是我放置所有不可重复使用的东西并且与许多应用程序结合的地方。

您还可以在项目级别创建一个 views.py,但与制作项目特定的应用程序相比,这有点混乱。

实际上,你把它放在哪里并不重要。

还是 Django 配置文件实际上会处理整个帐户/配置文件/事情?我已经用我自己的 UserProfile 扩展了 Django 的 User 类,但它更像是 User 表的附加字段而不是实际的“配置文件”(我没有创建头像或类似的东西,只是简单的东西,比如地址和电话号码,但大多数重要的是,我的应用程序依赖的一些自定义用户类型)。

这不是添加额外用户字段的方法。我建议您阅读有关存储有关用户的附加信息的文档。

于 2012-03-23T08:23:49.510 回答
10

对于不需要独立应用程序的最小方法,

  1. 创建一个模板并调用它profile.html或任何你想要的。

     <p>This is your profile, {{ user.username }}.</p>
    
  2. urls.py中,添加指向您的个人资料模板的 url 模式,标记它login_required,并为 url 命名:

     # ...
    
     from django.views.generic import TemplateView
     from django.contrib.auth.decorators import login_required
    
     urlpatterns = [
         # ...
         url(r'^accounts/profile/$', login_required(TemplateView.as_view(template_name='profile.html')), name='user_profile'),
         # ...
     ]
    
  3. settings.py中,添加以下行:

     LOGIN_REDIRECT_URL = 'user_profile'
    

此行告诉 Django 在登录后重定向用户时按名称执行反向 URL 查找。如果没有这一行,您的应用程序仍然可以工作,但它会很脆弱,因为它依赖于 Django 隐式配置的任意硬编码 URL。使用此行,如果您或其他人决定用户配置文件应位于/me/,您可以在步骤 2 中更改 URL,而不会破坏您的应用程序。

于 2016-05-09T03:10:09.210 回答
2
  1. 在设置中设置 LOGIN_REDIRECT_URL - https://docs.djangoproject.com/en/dev/ref/settings/#login-redirect-url
  2. 创建帐户应用程序,其中包含此代码。

您可以将 django userena 用于全栈用户区:https ://django-userena.readthedocs.org/en/latest/

于 2012-03-23T13:09:03.063 回答