django中级 --- User模块

模块说明:

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模块)