模块说明:
User对象属性
属性 | 描述 |
---|---|
username | 必填; 少于等于30字符. 只允许字符,数字,下划线 |
first_name | 可选; 少于等于30字符. |
last_name | 可选; 少于等于30字符. |
可选. 邮件地址. | |
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为例):
- 定义AUTH_USER_MODEL
yangke@YK-PC:~$ vim setting.py
AUTH_USER_MODEL = "appname.usermodel"
- 编辑自定义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模块注意以下几点:
- 自定义User表必须继承AbstractUser类
- 必须在setting.py中定义AUTH_USER_MODEL,格式为:AUTH_USER_MODEL = "appname.MyUser"
views调用自定义User:
- 导入get_user_model而不是from django.contrib.auth.models import User,因为从auth.models导入的是默认User模块
- 在views方法中使用User = get_user_model()来获取在setting中指定的自定义User模块
- 通过2中的定义User,即可使用django的User方法来操作,例如以上代码中创建用户方法
网友评论