zoukankan      html  css  js  c++  java
  • Django用户认证系统(一)User对象

    原文:https://www.cnblogs.com/linxiyue/p/4060213.html

    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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    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时,用户获得全部权限。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    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对象,默认为当时的时间。

    1
    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()方法。

    1
    2
    3
    4
    5
    6
    7
    8
    >>> 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

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

    修改密码

    使用内置的set_password()方法。

    1
    2
    3
    4
    >>> 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。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    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.")

      

  • 相关阅读:
    hdu 6702 ^&^ 位运算
    hdu 6709 Fishing Master 贪心
    hdu 6704 K-th occurrence 二分 ST表 后缀数组 主席树
    hdu 1423 Greatest Common Increasing Subsequence 最长公共上升子序列 LCIS
    hdu 5909 Tree Cutting FWT
    luogu P1588 丢失的牛 宽搜
    luogu P1003 铺地毯
    luogu P1104 生日
    luogu P1094 纪念品分组
    luogu P1093 奖学金
  • 原文地址:https://www.cnblogs.com/chdltanke/p/10365204.html
Copyright © 2011-2022 走看看