Spa*_*kMe 3 python django profiles
我正在编写简单的网站,需要处理用户和配置文件.第一个初步想法是在用户处理中使用django的构建,但是用户模型太窄并且不包含我需要的字段.该文档提到了用户配置文件,但用户配置文件部分已从djangobook中删除,涵盖django 1.0(理想情况下,该解决方案应与django 1.2一起使用),并且Internet上充满了不同的解决方案,而不是让选择更容易(如用户模型继承,用户配置文件和django信号等).
我想知道,如何以良好,现代,快速和安全的方式来写这个.我应该尝试扩展django内置用户模型,还是应该创建自己的用户模型,以保留我需要的所有信息?您可以在下面找到工作解决方案的一些规格和期望:
请告诉我你如何在应用程序中解决这些问题,以及使用django处理用户的最佳方法是什么.任何文章/博客或代码示例的链接都非常感谢!
Mik*_*one 12
用户应该能够注册和验证
django.contrib.auth是你想要的模块.请务必查看自定义登录表单的文档.
每个用户都应该有个人资料(或包含所有必填字段的模型)
settings.AUTH_PROFILE_MODULE正如其他人所指出的,你需要设定.
有关设置用户配置文件模型信息可用于最新的版本,1.1和1.0.它没有被删除.
用户不需要django内置管理面板,但他们需要通过简单的Web表单编辑他们的配置文件/模型
您可以像创建任何其他应用一样创建表单和视图; 也许做一个"用户控制面板"应用程序来处理这些事情.然后,您的视图将django.contrib.auth.models.User与django.contrib.auth.models.Group模型进行交互.您可以将其设置为执行您需要的任何操作.
编辑:回答你的答案形式的问题(分页Alex Trebek)...
第二版djangobook,涵盖django 1.0(接近1.2而不是0.96)不再有任何地方的信息,是什么让我高度困惑 - 有什么改变?是否有其他更好,更安全的方式来处理用户及其个人资料?因此问这个问题.
我不会推荐djangobook作为参考; 这个主题已经过时了.用户配置文件存在,我在我的Django 1.1.1站点中使用它们; 我甚至从NIS那里填充他们.
请使用我上面提供的链接.它们直接转到实际的Django文档并具有权威性.
顺便说一下,我忘了询问,如果您所有人引用的方式(即AUTH_PROFILE_MODULE)将在注册时自动创建
在文档中回答.
并且要求配置文件存在于任何操作上(用户现有存在,填充配置文件不应该存在,这就是我考虑以某种方式扩展用户模型的原因)?
如果User.get_profile()被调用,则需要存在配置文件.
它是否会得到更新(人们在与此主题相关的各种博客上提到'信号')?
它就像任何其他模型一样:只有在更改字段和调用时才会更新save().
该信号的部分是你如何在函数挂钩创建新的用户配置文件:
from django.db.models.signals import post_save
from django.contrib.auth import User
from myUserProfileApp import UserProfile
def make_user_profile(sender, **kwargs):
if 'created' not in kwargs or not kwargs['created']:
return
# Assumes that the `ForeignKey(User)` field in "UserProfile" is named "user".
profile = UserProfile(user=kwargs["instance"])
# Set anything else you need to in the profile, then...
profile.save()
post_save.connect(make_user_profile, sender=User, weak=False)
Run Code Online (Sandbox Code Playgroud)
这只会为新用户创建新的配置文件.现有用户需要手动添加配置文件:
$ ./manage.py shell
>>> from django.contrib.auth import User
>>> from myUserProfileApp import UserProfile
>>> for u in User.objects.all():
... UserProfile(user=u).save() # Add other params as needed.
...
Run Code Online (Sandbox Code Playgroud)
如果你有一些用户有个人资料而有些没有,你需要做更多的工作:
>>> for u in User.objects.all():
... try:
... UserProfile(user=u).save() # Add other params as needed.
... except:
... pass
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2640 次 |
| 最近记录: |