你好,我是 python 和 django 的新手,我需要一个获取当前用户配置文件的视图,我知道我应该使用来自 User 的 get_profile,但我不知道如何使用它。我阅读了 django 文档,但对我没有帮助。这是我从文档中找到的:
from django.contrib.auth.models import User
profile=request.user.get_profile()
你好,我是 python 和 django 的新手,我需要一个获取当前用户配置文件的视图,我知道我应该使用来自 User 的 get_profile,但我不知道如何使用它。我阅读了 django 文档,但对我没有帮助。这是我从文档中找到的:
from django.contrib.auth.models import User
profile=request.user.get_profile()
Django 的文档说明了一切,特别是Storing additional information about users部分。首先,您需要在models.py
字段中的某处定义一个模型,以获取用户的其他信息:
模型.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.")
然后,您需要通过在您的内部设置来表明此模型 ( UserProfile
) 是用户配置文件:AUTH_PROFILE_MODULE
settings.py
设置.py
...
AUTH_PROFILE_MODULE = 'accounts.UserProfile'
...
您需要替换accounts
为您的应用程序的名称。最后,您希望在每次User
创建实例时通过注册post_save
处理程序来创建配置文件,这样每次创建用户时 Django 也会创建他的配置文件:
模型.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)
要在您的视图中访问当前用户的个人资料,只需使用User
请求提供的实例,并在其上调用get_profile:
def your_view(request):
profile = request.user.get_profile()
...
# Your code
基本上 django 用户模型将只提供对字段的访问(名字、姓氏、电子邮件、密码、is_staff、is_active、last_login)。
但是,如果我们想在这个模型中添加任何额外的字段,比如我们需要为每个用户添加一个名为 dateofbirth 的新列,那么我们需要在 User 模型中添加一个名为 DOB 的列。但这是不可能的,因为我们无法编辑 django 用户模型。
为了实现这一点
1.我们可以有一个单独的新表,其中包含email id & DOB 列,这样User 模型中的列与新表中的列映射。但这将为每个数据库请求创建一个新的数据库实例。说如果你想找到客户的出生日期,
在第二种方法中,
不要使用 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.
希望以上细节能让您清楚地了解 django 配置文件。如果有任何进一步的帮助,请告诉我。我在我的项目中使用了 django 配置文件。
老问题,但我认为今天看到它的任何人都可以从中受益:
Django 1.5 增加了——轻松地——扩展用户模型的能力。这可能更可取,因为您现在只需要处理一个对象而不是两个!似乎更现代的方式。
您需要通过设置AUTH_PROFILE_MODULE = 'accounts.UserProfile'
(例如)指定哪个类是您的“个人资料”