• Django用户认证系统(一)User对象


    User对象

    User对象是认证系统的核心。用户对象通常用来代表网站的用户,并支持例如访问控制、注册用户、关联创建者和内容等。在Django认证框架中只有一个用户类,例如超级用户('superusers’)或('staff')用户只不过是相同用户对象设置了不同属性而已。

    缺省字段Fields

    username

    用户名,必需字段。30个字符或更少,可以包含 _, @, +, . 和 - 字符。

    first_name
    可选。 30 characters or fewer.

    last_name
    可选。 30 characters or fewer.

    email
    邮箱,可选。 Email address.

    password
    密码,必需。Django不是以明文存储密码的,而是存储哈希值。

    groups
    用户组。Many-to-many relationship to Group

    user_permissions
    用户权限。Many-to-many relationship to Permission

        groups = models.ManyToManyField(Group, verbose_name=_('groups'),
            blank=True, help_text=_('The groups this user belongs to. A user will '
                                    'get all permissions granted to each of '
                                    'their groups.'),
            related_name="user_set", related_query_name="user")
        user_permissions = models.ManyToManyField(Permission,
            verbose_name=_('user permissions'), blank=True,
            help_text=_('Specific permissions for this user.'),
            related_name="user_set", related_query_name="user")

    is_staff
    Boolean。决定用户是否可以访问admin管理界面。默认False。

    is_active
    Boolean。 用户是否活跃,默认True。一般不删除用户,而是将用户的is_active设为False。

    is_superuser
    Boolean。默认False。当设为True时,用户获得全部权限。

        def has_perm(self, perm, obj=None):
            """
            Returns True if the user has the specified permission. This method
            queries all available auth backends, but returns immediately if any
            backend returns True. Thus, a user who has permission from a single
            auth backend is assumed to have permission in general. If an object is
            provided, permissions for this specific object are checked.
            """
    
            # Active superusers have all permissions.
            if self.is_active and self.is_superuser:
                return True
    
            # Otherwise we need to check the backends.
            return _user_has_perm(self, perm, obj)
    

    last_login

    上一次的登录时间,为datetime对象,默认为当时的时间。

    user.last_login = timezone.now()

    date_joined
    用户创建的时间

    方法Methods

    is_anonymous()

    是否是匿名用户。

    is_authenticated()
    用户是否通过验证,登陆。

    get_full_name()
    返回first_name plus the last_name, with a space in between.

    get_short_name()
    返回first_name.

    set_password(raw_password)
    设置密码。

    check_password(raw_password)
    验证密码。

    get_group_permissions(obj=None)
    返回用户组权限的集合。

    get_all_permissions(obj=None)
    返回用户所有的权限集合。

    has_perm(perm, obj=None)
    用户是否具有某个权限。perm的格式是 "<app label>.<permission codename>". 

    has_perms(perm_list, obj=None)
    用户是否具有权限列表中的每个权限。

    创建用户

    由于User对象的密码不是明文存储的,所以创建User对象时与通常的Model create不同,需用内置的create_user()方法。

    >>> from django.contrib.auth.models import User
    >>> user = User.objects.create_user('john', 'lennon@thebeatles.com', 'johnpassword')
    
    # At this point, user is a User object that has already been saved
    # to the database. You can continue to change its attributes
    # if you want to change other fields.
    >>> user.last_name = 'Lennon'
    >>> user.save()
    

    当然也可以在admin界面中添加用户。

    创建superusers

    $ python manage.py createsuperuser --username=joe --email=joe@example.com
    

    修改密码

    使用内置的set_password()方法。

    >>> from django.contrib.auth.models import User
    >>> u = User.objects.get(username='john')
    >>> u.set_password('new password')
    >>> u.save()
    

    验证用户

    authenticate()

    验证给出的username和password是否是一个有效用户。如果有效,则返回一个User对象,无效则返回None。

    from django.contrib.auth import authenticate
    user = authenticate(username='john', password='secret')
    if user is not None:
        # the password verified for the user
        if user.is_active:
            print("User is valid, active and authenticated")
        else:
            print("The password is valid, but the account has been disabled!")
    else:
        # the authentication system was unable to verify the username and password
        print("The username and password were incorrect.")
    

      

  • 相关阅读:
    如何让我domain里的机器都跟domain controller的时间保持一致?
    [PowerShell Utils] Create a list of virtual machines based on configuration read from a CSV file in Hyper-V
    Reboot server stuck at “Press ESC in 1 seconds to skip startup.nsh”
    [PowerShell Utils] Remotely install Hyper-V and Failover Cluster feature on a list of windows 2012 servers
    [PowerShell Utils] Automatically Change DNS and then Join Domain
    SharePoint 2016 IT Preview的新feature列表
    LeetCode Permutations问题详解
    Rotate Image 旋转图像
    单链表的快速排序(转)
    anagrams 查找序列里具有相同字符但顺序不同的单词
  • 原文地址:https://www.cnblogs.com/linxiyue/p/4060213.html
Copyright © 2020-2023  润新知