使用 Django 注册应用程序在 Django 中处理帐户/个人资料的好地方在哪里?
Posted
技术标签:
【中文标题】使用 Django 注册应用程序在 Django 中处理帐户/个人资料的好地方在哪里?【英文标题】:Where is a good place to work on accounts/profile in Django with the Django registration app? 【发布时间】:2012-04-07 19:26:24 【问题描述】:我注意到,在我使用 Django 注册登录后,它会将我重定向到 accounts/profile/
。默认情况下,Django 注册的url.py
不处理accounts/profile/
,所以我需要创建自己的。
其实这个问题有三个方面:
-
为什么登录后会重定向到
accounts/profile/
?有没有办法改变它?最好在成功登录后,我希望 Django 重定向回登录页面之前的页面。
如果我要为accounts/profile/
创建自己的视图和模板,我应该把它放在哪里? Django 内置的users
(auth_user
) 在项目内的所有 Django 应用程序之间共享,那么我应该将view.py
放在项目文件夹中而不是应用程序文件夹中吗?
或者Django profile 真的会处理整个account/profiles/
的事情吗?我已经用我自己的UserProfile
扩展了 Django 的User
类,但它更像是User
表的附加字段,而不是实际的“配置文件”(我没有创建头像或类似的东西,只是简单的东西,比如地址和电话号码,但最重要的是,我的应用所依赖的一些自定义用户类型)。
【问题讨论】:
【参考方案1】:为什么登录后会重定向到accounts/profile/?有没有 有办法改变吗?最好在成功登录后我会 像 Django 一样重定向回登录页面之前的页面。
只需更改设置LOGIN_REDIRECT_URL
如果我要为帐户/个人资料/创建自己的视图和模板, 那我应该把它放在哪里? Django 的内置用户(auth_user)是 在项目内的所有 Django 应用程序之间共享,所以我应该将 view.py 在项目文件夹中而不是在 app 文件夹中?
我喜欢在每个项目中创建一个名为“project_specific”的应用。这就是我放置所有不可重复使用的东西并且与许多应用程序结合的地方。
您也可以在项目级别创建 views.py,但与制作项目特定的应用程序相比,这有点混乱。
实际上,你把它放在哪里并不重要。
或者 Django 配置文件是否真的负责这整个 帐户/个人资料/东西?我已经扩展了 Django 的 User 类 我自己的用户配置文件,但它更像是用户的附加字段 表而不是实际的“个人资料”(我没有创建头像或任何东西 像那样,只是简单的东西,比如地址和电话号码,但是 最重要的是,我的应用所依赖的一些自定义用户类型)。
这不是添加额外用户字段的方法。我建议您阅读Storing additional information about users 上的文档。
【讨论】:
【参考方案2】:对于不需要独立应用的最小方法,
创建一个模板并将其命名为profile.html
或任何您想要的名称。
<p>This is your profile, user.username .</p>
在 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'),
# ...
]
在settings.py
中,添加以下行:
LOGIN_REDIRECT_URL = 'user_profile'
这一行告诉 Django 在登录后重定向用户时按名称执行反向 URL 查找。如果没有这一行,您的应用程序仍然可以工作,但它会很脆弱,因为它依赖于 Django 隐式配置的任意硬编码 URL。使用此行,如果您或其他人决定用户配置文件应位于 /me/
,您可以在第 2 步中更改 URL,而不会破坏您的应用程序。
【讨论】:
这是天才,谢谢! 我刚刚注意到我正在导入login_required
但没有使用它。需要应用它,否则无需登录即可访问个人资料页面(尽管它可能不会显示太多,因为不会有用户)。我现在修复了它,但没有测试它。【参考方案3】:
-
在设置中设置 LOGIN_REDIRECT_URL - https://docs.djangoproject.com/en/dev/ref/settings/#login-redirect-url
创建帐户应用,其中包含相关代码。
您可以将 django userena 用于全栈用户区:https://django-userena.readthedocs.org/en/latest/
【讨论】:
以上是关于使用 Django 注册应用程序在 Django 中处理帐户/个人资料的好地方在哪里?的主要内容,如果未能解决你的问题,请参考以下文章
Django:如何在用户使用默认的 UserCreationForm 注册后立即登录?