Django2.0——权限系统Auth
日期: 2019-03-16 分类: 个人收藏 337次阅读
Django默认提供了用户权限管理模块auth,在我们第一次数据库迁移时,他就自动帮我们在数据库中创建三张表:
- user表,User是auth模块中维护用户信息的表,在数据库中该表被命名为auth_user. 该表继承自Abstractuser.
- group表,定义用户组模型,该表只包含一个name字段和一个permissions(权限)多对多关系字段,在数据库中被命名为auth_group.
- Permission, 权限表,提供表级别的权限控制,可以检查用户是否对某个表拥有增(add),改(change),删(delete)权限。
从数据库生成的表来看,这三张表实现了两两多对多的关联,其中用户和组生成的第三张表是auth_user_groups,group和permission生成的第三张表是auth_group_permissions,用户和权限生成的第三张表是auth_user_user_permissions。这里我们主要介绍下user表。
User表
在auth中user继承自AbstractUser,其中AbstractUser又继承自AbstractBaseUser和PermissionsMixin,其中AbstractBaseUser只保存了密码和登陆时间,PermissionsMixin提供了权限先关的字段,比如:is_superuser和组合权限表之间的关联。
User对象的字段
- password:Django默认保存是加密后的密码,无法直接看到明文密码
- last_login:上一次登陆时间
- is_superuser:是否是超级管理员,是为1,否为0
- username:用户名
- first_name
- last_name
- email:邮箱
- is_staff:用户是否拥有网站的管理权限
- is_active:是否允许用户登录, 设置为 False,可以在不删除用户的前提下禁止用户登录。
- data_joined:账户创建日期
- groups: 与组多对多关联的字段
- user_permissions: 与权限关联的多对多字段,也就是是说明了为什么第三张表表为auth_user_user_permissions. 表名(user)+字段名(user_permissions)
类属性
- is_authenticated:判断是否被认证,即是否登陆
- is_anonymous: 是否为匿名用户
- username_validator:指向用于验证用户名的验证实例,默认是
validators.UnicodeUsernameValidator
类方法
- get_username(): 获取用户名
- get_full_name(): 获取全名,即first_name+空格+last_name
- get_short_name():获取first_name
- set_password(raw_password): 设置密码,如果raw_password是None,则密码将被设置为不可用的密码,就像使用了
set_unusable_password()
一样。 - check_password(raw_password): 检查密码是否正确。
- set_unusable_password():将用户标记为未设置密码,即密码为None
- has_usable_password():返回该用户是否未设置密码
- get_group_permissions(): 获取这个用户所在组中所具有的的全部权限。
- has_perm(): 判断一个用户是否具有某个权限。
- has_perms(perm_list): 判断用户对一个权限列表是否具有权限。
- has_module_perms(package_name): 判断对app是否有权限。
Auth模块常用方法
- 创建用户
python manage.py createsuperuser
python manage.py createuser
-
模块导入
from django.contrib import auth
- 常用方法
1.authenticate():
提供了用户认证功能,即验证用户名以及密码是否正确,一般需要username 、password两个关键字参数。如果认证成功(用户名和密码正确有效),便会返回一个 User 对象。authenticate()会在该 User 对象上设置一个属性来标识后端已经认证了该用户,且该信息在后续的登录过程中是需要的,认证失败返回None。
user = auth.authenticate(username='theuser',password='thepassword')
2.login(HttpRequest, user):
该函数接受一个HttpRequest对象,以及一个经过认证的User对象。该函数实现一个用户登录的功能。它本质上会在后端为该用户生成相关session数据。
def my_view(request):
username = request.POST['username']
password = request.POST['password']
user = auth.authenticate(username=username, password=password)
if user is not None:
auth.login(request, user)
# Redirect to a success page.
...
else:
# Return an 'invalid login' error message.
...
3.logout(request):
该函数接受一个HttpRequest对象,无返回值。当调用该函数时,当前请求的session信息会全部清除。该用户即使没有登录,使用该函数也不会报错。
def logout_view(request):
auth.logout(request)
# Redirect to a success page.
4.is_authenticated():
用来判断当前请求是否通过了认证。
def my_view(request):
if not request.user.is_authenticated():
return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
5.login_requierd():
auth 给我们提供的一个装饰器工具,用来快捷的给某个视图函数添加登录校验。
from django.contrib.auth.decorators import login_required
@login_required
def my_view(request):
...
若用户没有登录,则会跳转到django默认的 登录URL '/accounts/login/ ' 并传递当前访问url的绝对路径 (登陆成功后,会重定向到该路径)。如果需要自定义登录的URL,则需要在settings.py文件中通过LOGIN_URL进行修改。 LOGIN_URL = '/login/' # 这里配置成你项目登录页面的路由
6.method_decorator():
auth 给我们提供的一个装饰器工具,用来快捷的给某个类视图添加登录校验。
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
class Home(views.View):
@method_decorator(login_required)
def get(self, request):
return render(request, 'home.html')
7.create_user():
auth 提供的一个创建新用户的方法,需要提供必要参数(username、password)等。
from django.contrib.auth.models import User
user = User.objects.create_user(username = '用户名', password = '密码', email = '邮箱', ...)
check_password(password)
8.create_superuser():
auth 提供的一个创建新的超级用户的方法,需要提供必要参数(username、password)等。
from django.contrib.auth.models import User
user = User.objects.create_superuser(username = '用户名', password = '密码', email = '邮箱', ...)
check_password(password)
9.permission_requires(权限,raise_exception=True):
对视图函数指定权限验证。
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
标签:后端——Django框架
上一篇: pygame安装(超级详细)
下一篇: Linux中互斥锁、读写锁、自旋锁的使用
精华推荐