美文网首页
django中级 --- User模块

django中级 --- User模块

作者: 梦想做小猿 | 来源:发表于2016-12-18 21:13 被阅读0次

    模块说明:

    User对象属性

    属性 描述
    username 必填; 少于等于30字符. 只允许字符,数字,下划线
    first_name 可选; 少于等于30字符.
    last_name 可选; 少于等于30字符.
    email 可选. 邮件地址.
    password 必填. 密码的摘要hash(Django不会存储原始密码),详见密码章节部分
    is_staff 布尔值. 用户是否拥有网站的管理权限.
    is_active 布尔值. 是否允许用户登录, 设置为False,可以不用删除用户来禁止 用户登录
    is_superuser 布尔值. 用户是否拥有所有权限,而无需任何显式的权限分配定义
    last_login 用户最后登录的时间,缺省会设置为当前时间
    date_joined 创建用户的时间,当用户创建时,缺省的设置为当前的时间

    User方法:

    方法 描述
    is_authenticated() 如果是真正的 User 对象,返回值恒为 True 。 用于检查用户是否已经通过了认证。通过认证并不意味着 用户拥有任何权限,甚至也不检查该用户是否处于激活状 态,这只是表明用户成功的通过了认证。
    is_anonymous() 如果是个 AnonymousUser ,返回值为 True , 如果是 User 对象,返回值为 False 。一般来 说, is_authenticated() 会比这个方法更常用些。
    get_full_name() 返回值为: first_name 加上 last_name ,以 空格分隔。
    set_password(passwd) 将用户的密码设置为给定的字符串,实际密码已被哈希 处理。这时并不会真正保存 User 对象。
    check_password(passwd) 如果给定的字符串通过了密码检查,返回 True 。 密码比较已进行了哈希处理。
    get_group_permissions() 返回用户通过所属组获得的权限列表
    get_all_permissions() 返回用户通过所属组和用户自身权限所获得的所有权限 列表。
    has_perm(perm) 如果用户拥有给定的权限,返回 True , perm 应形如 "package.codename" 的格式。如果用户处于 非激活状态,则总是返回 False 。
    has_perms(perm_list) 如果用户拥有所有给定的权限,返回 True 。 如果用户处于非激活状态,则总是返回 False 。
    has_module_perms(app_label) 如果用户拥有任何给定 app_label 的权限,返回 True 。如果用户处于非激活状态,则总是返回 False
    get_and_delete_messages() 返回用户的 Message 对象列表,并从队列中删除。
    email_user(subj, msg) 给用户发送电子邮件,用 DEFAULT_FROM_EMAIL 的设 置作为发件人。也可以用第3个参数 from_email 来 覆盖设置。
    get_profile() 返回用户的网站自定义profile,详见Profile章节

    模块扩展:

    django默认的user模块字段固定,可能无法满足我们对用户管理的需求,所以需要自定义用户表

    定义方法:

    • AbstractUser
      自定义user模块继承该类,则可在原user模块中添加自定义字段

    • AbstractBaseUser
      自定义user模块继承该类,则原user模块只保留password, last_login,is_active三个字段

    使用方法(以AbstractUser为例):

    1. 定义AUTH_USER_MODEL
    yangke@YK-PC:~$ vim setting.py
    AUTH_USER_MODEL = "appname.usermodel"
    
    1. 编辑自定义user模块
    yangke@YK-PC:~$ vim models.py
    from django.db import models
    from django.contrib.auth.models import AbstractUser
    
      class MyUser(AbstractUser):
          myfields =  models.CharField(max_length=80)
          ...
    
          def __unicode__(self):
              return self.name
    
      yangke@YK-PC:~$ vim views.py
      ......
      from django.contrib.auth import get_user_model
    
      def usertest(request):
          User = get_user_model()
          User.objects.create_user(username="admin",password="123456",......)
        ......
    

    代码解释:
    自定义User模块注意以下几点:

    1. 自定义User表必须继承AbstractUser类
    2. 必须在setting.py中定义AUTH_USER_MODEL,格式为:AUTH_USER_MODEL = "appname.MyUser"

    views调用自定义User:

    1. 导入get_user_model而不是from django.contrib.auth.models import User,因为从auth.models导入的是默认User模块
    2. 在views方法中使用User = get_user_model()来获取在setting中指定的自定义User模块
    3. 通过2中的定义User,即可使用django的User方法来操作,例如以上代码中创建用户方法

    相关文章

      网友评论

          本文标题:django中级 --- User模块

          本文链接:https://www.haomeiwen.com/subject/ggkamttx.html