在Django中使用Django注册应用程序处理账户/个人资料的好地方在哪里?

21

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

实际上,这个问题有三个方面:

  1. 为什么登录后会重定向到accounts/profile/?有没有方法可以更改?最好是在成功登录后,Django将重定向回登录前的页面。
  2. 如果我要为accounts/profile/创建自己的视图和模板,那我应该把它放在哪里?Django内置的users(auth_user)在项目中所有Django应用程序之间共享,所以我应该将view.py放在项目文件夹而不是应用程序文件夹中吗?
  3. 或者Django profile实际上负责整个account/profiles/事情?我已经使用自己的UserProfile扩展了Django的User类,但它更像是User表格的附加字段而不是真正的“档案”(我没有创建头像或任何类似的东西,只是一些简单的东西,如地址和电话号码,但最重要的是我的应用程序依赖的一些自定义用户类型)。
3个回答

15
登录后为什么会重定向到accounts/profile/?有没有办法更改?最好是在成功登录后,我希望Django能够重定向回登录页面之前的页面。
只需更改设置LOGIN_REDIRECT_URL
如果我要为accounts/profile/创建自己的视图和模板,那么我应该把它放在哪里?Django内置用户(auth_user)在项目中所有Django应用程序之间共享,所以我应该将view.py放在项目文件夹中而不是应用程序文件夹中吗?
我喜欢在每个项目中创建一个名为“project_specific”的应用程序。这是我放置所有不可重用且与许多应用程序耦合的东西的地方。
你也可以在项目级别创建views.py,但与创建特定于项目的应用程序相比,这有点混乱。
实际上,放在哪里并不重要。
「或者Django的个人资料实际上是否负责处理整个帐户/个人资料/事情?我已经使用自己的UserProfile扩展了Django的User类,但它更像是用户表中的附加字段而不是实际的“个人资料”(我没有创建头像或任何类似的东西,只是简单的地址和电话号码,但最重要的是,一些我的应用程序依赖的自定义用户类型)。
这不是添加额外用户字段的方式。我建议您阅读存储有关用户的其他信息的文档。」

10

如果希望采用最简化的方法且不需要独立的应用程序,

  1. Create a template and call it profile.html or anything you want.

     <p>This is your profile, {{ user.username }}.</p>
    
  2. In urls.py, add a url pattern that points to your profile template, mark it login_required, and give the url a name:

     # ...
    
     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. In settings.py, add the following line:

     LOGIN_REDIRECT_URL = 'user_profile'
    

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


这太聪明了,谢谢! - D Left Adjoint to U
我刚刚注意到我正在导入login_required但没有使用它。必须应用它,否则可以在未登录的情况下访问个人资料页面(尽管可能不会显示太多,因为没有用户)。我现在已经修复了它,但没有测试。 - hashemi

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接