繁体   English   中英

在django中获取用户个人资料

[英]get user profile in django

你好我是python和django的新手我需要一个获取当前用户配置文件的视图我知道我应该使用来自User的get_profile但我不知道如何使用它。 我读了django文件,它没有帮助我。 这是我从doc中找到的:

from django.contrib.auth.models import User
profile=request.user.get_profile()

Django的文档说明了这一切,特别是存储有关用户的其他信息的部分。 首先,您需要在models.py某个位置定义模型,其中包含用户附加信息的字段:

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.")

然后,您需要通过在settings.py设置AUTH_PROFILE_MODULE来指示此模型( UserProfile )是用户配置文件:

settings.py

...
AUTH_PROFILE_MODULE = 'accounts.UserProfile'
...

您需要使用应用名称替换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)

访问个人资料

要在视图中访问当前用户的配置文件,只需使用请求提供的User实例,并在其上调用get_profile

def your_view(request):
    profile = request.user.get_profile()
    ...
    # Your code

基本上django用户模型将仅为字段提供访问权限(firstname,lastname,email,password,is_staff,is_active,last_login)。

但是,如果我们要向此模型添加任何额外字段,请说我们需要为每个用户添加一个名为dateofbirth的新列,然后我们需要在User模型中添加一个名为DOB的列。 但这是不可能的,因为我们无法编辑django用户模型。

要实现这一点

1.我们可以有一个单独的新表,其中包含电子邮件ID和DOB列,以便用户模型中的列与新表中的列进行映射。 但是这将为每个数据库请求创建一个新的数据库实例。 如果你想找到客户的DOB,

  • 首先,我们需要从User表中获取客户的映射id的值。
  • 使用上面的值,从新表中获取DOB。

在第二种方法中,

不使用django用户模型,而是使用您自己的自定义模型以及所需的所有字段。 但是,如果任何与安全性相关的更新或对django User模型进行的某些增强,我们就无法直接使用它。 我们需要在最后(无论我们使用自定义模型的地方)进行更多代码更改。对于开发人员来说,识别代码并进行更改会有点麻烦。

为了克服上述问题,django引入了django profile,它非常简单,更灵活。 优点是

  • 可以在不修改代码的情况下应用用户模型的更新/增强
  • 无需创建新的数据库实例来获取额外的值。
  • 由于该字段具有onetoone映射,因此从一个表中删除数据也将删除其他表。
  • 更安全,因为我们使用django模型(没有sql注入)

如何使用:

在settings.py中创建一个变量AUTH_PROFILE_MODULE = “appname.profiletable”

  • 在models.py中,创建一个包含所需字段的新表,并确保用户模型中的id是使用新表映射的。
  • 创建一个信号,只要在用户模型中添加新条目,就会在新表中插入一行。
  • 可以使用User对象本身访问新表中的值。

说,我们创建了一个新的表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 profile。

老问题,但我认为今天有人看到它可能会从中受益:

Django 1.5增加了 - 轻松 - 扩展用户模型的能力。 这可能更好,因为你现在只有一个对象而不是两个! 似乎更现代的方式。

https://hurricanelabs.com/blog/django-user-models/

您需要通过设置AUTH_PROFILE_MODULE = 'accounts.UserProfile' (例如)来指定哪个类是您的“配置文件”

https://docs.djangoproject.com/en/1.4/topics/auth/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM