nim*_*m4n 19 python django django-views
你好我是python和django的新手我需要一个获取当前用户配置文件的视图我知道我应该使用来自User的get_profile但我不知道如何使用它.我读了django文件,它没有帮助我.这是我从doc中找到的:
from django.contrib.auth.models import User
profile=request.user.get_profile()
Run Code Online (Sandbox Code Playgroud)
Cés*_*sar 45
Django的文档说明了这一切,特别是存储有关用户的其他信息的部分.首先,您需要在models.pywith with fields中的某个位置定义模型,以获取用户的其他信息:
models.py
from django.contrib.auth.models import User
class UserProfile(models.Model):
# This field is required.
user = models.OneToOneField(User)
# Other fields here
accepted_eula = models.BooleanField()
favorite_animal = models.CharField(max_length=20, default="Dragons.")
Run Code Online (Sandbox Code Playgroud)
然后,你需要表明,该模型(UserProfile)是通过设置用户配置文件AUTH_PROFILE_MODULE的内部settings.py:
settings.py
...
AUTH_PROFILE_MODULE = 'accounts.UserProfile'
...
Run Code Online (Sandbox Code Playgroud)
您需要替换accounts为您的应用程序的名称.最后,您希望每次User创建实例时通过注册post_save处理程序来创建配置文件,这样每次创建用户时,Django也会创建其配置文件:
models.py
from django.contrib.auth.models import User
class UserProfile(models.Model):
# This field is required.
user = models.OneToOneField(User)
# Other fields here
accepted_eula = models.BooleanField()
favorite_animal = models.CharField(max_length=20, default="Dragons.")
def create_user_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
post_save.connect(create_user_profile, sender=User)
Run Code Online (Sandbox Code Playgroud)
要在视图中访问当前用户的配置文件,只需使用User请求提供的实例,并在其上调用get_profile:
def your_view(request):
profile = request.user.get_profile()
...
# Your code
Run Code Online (Sandbox Code Playgroud)
基本上django用户模型将仅为字段提供访问权限(firstname,lastname,email,password,is_staff,is_active,last_login).
但是,如果我们要向此模型添加任何额外字段,请说我们需要为每个用户添加一个名为dateofbirth的新列,然后我们需要在User模型中添加一个名为DOB的列.但这是不可能的,因为我们无法编辑django用户模型.
要实现这一点
1.我们可以有一个单独的新表,其中包含电子邮件ID和DOB列,以便用户模型中的列与新表中的列进行映射.但是这将为每个数据库请求创建一个新的数据库实例.如果你想找到客户的DOB,
在第二种方法中,
不使用django用户模型,而是使用您自己的自定义模型以及所需的所有字段.但是,如果任何与安全性相关的更新或对django用户模型进行的某些增强,我们就无法直接使用它.我们需要在最后(无论我们使用自定义模型的地方)进行更多代码更改.对于开发人员来说,识别代码并进行更改会有点麻烦.
为了克服上述问题,django引入了django profile,它非常简单,更灵活.优点是
如何使用:
在settings.py中创建一个变量AUTH_PROFILE_MODULE = "appname.profiletable"
比如,我们创建了一个新的表extrauser,它有DOB,emailid.要查找客户的DOB,请使用
a=User.objects.get(email='x@x.xom')
a.get_profile().DOB will give the dateofbirth value from extrauser table.
Run Code Online (Sandbox Code Playgroud)
希望以上细节让您清楚了解django个人资料.如果有任何帮助,请告诉我.我在我的项目中使用过django profile.
老问题,但我认为今天有人看到它可能会从中受益:
Django 1.5增加了 - 轻松 - 扩展用户模型的能力.这可能更好,因为你现在只有一个对象而不是两个!似乎更现代的方式.
https://hurricanelabs.com/blog/django-user-models/
| 归档时间: |
|
| 查看次数: |
33308 次 |
| 最近记录: |