Python django用户模型-我什么时候需要它?

Python django用户模型-我什么时候需要它?,python,django,django-models,django-users,Python,Django,Django Models,Django Users,我有一个理解问题: 我想为我的页面创建用户配置文件,它将具有许多属性。但由于我对django的auth的用户模型还不熟悉,我不知道是否可以用我为用户配置文件设置的新属性扩展该模型。e、 地址、年龄 如果没有,为什么有用户模型?是否仅用于验证目的?如何处理和区分这两种用户模型 示例案例: 用户想要登录,我用auth的用户模型检查权限,并在django的用户模型和我的用户模型之间设置一些关系?我在这里有点困惑,因为Django 1.5可以使用自定义字段创建自己的用户模型。并告诉Django将该模型用

我有一个理解问题:

我想为我的页面创建用户配置文件,它将具有许多属性。但由于我对django的auth的用户模型还不熟悉,我不知道是否可以用我为用户配置文件设置的新属性扩展该模型。e、 地址、年龄

如果没有,为什么有用户模型?是否仅用于验证目的?如何处理和区分这两种用户模型

示例案例:

用户想要登录,我用auth的用户模型检查权限,并在django的用户模型和我的用户模型之间设置一些关系?我在这里有点困惑,因为Django 1.5可以使用自定义字段创建自己的用户模型。并告诉Django将该模型用于auth

链接到文档:

更新:
如果您使用的是Django 1.4,则可以帮助您定义自定义用户模型。

自Django 1.5以来,您可以使用自定义字段创建自己的用户模型。并告诉Django将该模型用于auth

from django.contrib.auth.models import User

class MyCustomUser( User ):
    # my properties here
    # my custom methods here
链接到文档:

更新:
如果您使用的是Django 1.4,则可以帮助您定义自定义用户模型。

从用户模型派生类

from django.contrib.auth.models import User

class MyCustomUser( User ):
    # my properties here
    # my custom methods here
然后,您需要一个自定义后端来处理传递自定义用户类而不是普通用户,以便可以访问该自定义用户类的属性

from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import check_password
from my.app.models import MyCustomUser

class CustomUserModelBackend(ModelBackend):
    def authenticate(self, username=None, password=None):
        try:
            user = MyCustomUser.objects.get(username=username)
            if user.check_password(password):
                return user
        except Player.DoesNotExist:
            return None
        return None #Password was wrong

    def get_user(self, user_id):
        try:
            return MyCustomUser.objects.get(pk=user_id)
        except Player.DoesNotExist:
            return None 

然后将后端添加到
settings.py中的
AUTHENTICATION\u BACKENDS
元组中。您可以进一步自定义它,这是一个简单的实现。

从用户模型派生类

from django.contrib.auth.models import User

class MyCustomUser( User ):
    # my properties here
    # my custom methods here
然后,您需要一个自定义后端来处理传递自定义用户类而不是普通用户,以便可以访问该自定义用户类的属性

from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import check_password
from my.app.models import MyCustomUser

class CustomUserModelBackend(ModelBackend):
    def authenticate(self, username=None, password=None):
        try:
            user = MyCustomUser.objects.get(username=username)
            if user.check_password(password):
                return user
        except Player.DoesNotExist:
            return None
        return None #Password was wrong

    def get_user(self, user_id):
        try:
            return MyCustomUser.objects.get(pk=user_id)
        except Player.DoesNotExist:
            return None 

然后将后端添加到
settings.py中的
AUTHENTICATION\u BACKENDS
元组中。您可以进一步自定义它,这是一个简单的实现。

我将尝试从pre django 1.5的角度进行解释

django的auth模型为您提供了一组“方便”的方法,如登录、注销、密码重置等,这些方法可以无缝地工作。有更多字段是一种非常常见的情况,因此一种方法是创建一个userprofile模型,该模型从django auth用户模型继承,或者在同一个模型上有一个关系。这样,您就不必重新实现一些已经实现的特性。此外,包中还有
权限
模型,它们在用户许可方面添加了一整层功能

例如:

 from django.contrib.auth.models import User
 class MyCustomProfile(User):
     #inherits all the attributes of default `User` models
     #additional models here. 

通过这种方式,您可以使用所有功能并在其上构建


这在django-1.5中有了一点变化,它允许用户拥有自定义字段,从而避免了在现有的
用户
模型之上创建
用户配置文件
模型

我将尝试从django 1.5之前的角度进行解释

django的auth模型为您提供了一组“方便”的方法,如登录、注销、密码重置等,这些方法可以无缝地工作。有更多字段是一种非常常见的情况,因此一种方法是创建一个userprofile模型,该模型从django auth用户模型继承,或者在同一个模型上有一个关系。这样,您就不必重新实现一些已经实现的特性。此外,包中还有
权限
模型,它们在用户许可方面添加了一整层功能

例如:

 from django.contrib.auth.models import User
 class MyCustomProfile(User):
     #inherits all the attributes of default `User` models
     #additional models here. 

通过这种方式,您可以使用所有功能并在其上构建


这在django-1.5中有了一点变化,它允许用户拥有自定义字段,从而避免了在现有的
用户
模型之上创建
用户配置文件
模型

太好了,谢谢你提供清晰的信息。我真的很喜欢这种语言太好了,谢谢你提供的清晰信息。我真的很喜欢这种语言很酷,谢谢。我使用的是django 1.4,但是逻辑几乎相同,谢谢。我使用的是django 1.4,但逻辑几乎相同