Django用户认证: 利用Django Auth模块实现用户注册、登录与登出
用户登录注册属于用户认证的一部分,Django内置了一套用户认证体系,使用起来比较方便,而且支持用户定制和拓展,足以满足任何复杂的业务需求。
1 Django 用户管理机制
Django框架中,用户权限管理被划分为三个层次:
- 用户:系统使用者,拥有自己的权限。可被一个或多个用户组包含。
- 用户组:对用户进行分类。同一用户组拥有相同的权限。
- 权限:用于约束用户行为。Django中一个完整的权限除权限本身外,还包括用户和对象,即什么用户对什么对象具有什么样的权限。
2 Auth模块
Auth模块是Django框架内置的权限管理模块。利用Auth模块可以实现用户身份认证、用户组和权限管理。
2.1 配置权限管理模块
在项目配置文件settings.py中加入以下代码:
INSTALLED_APPS =['django.contrib.admin','django.contrib.auth',# 权限管理模块'django.contrib.contenttypes',# 内容管理模块]
2.2 Auth模块中的用户模型 用户组模型 用户权限模型
模块名称说明Django.contrib.auth.models.UserAuth模块中的用户模型Django.contrib.auth.models.GroupAuth模块中的组模型Django.contrib.auth.models.PermissionAuth模块中的权限模型
3 用户模型(User)介绍
3.1 User模型内置字段介绍
2.2中的用户模型是Django用户认证的核心,用户模型内置了多个字段可直接使用。
内置字段名称说明字段类型id数据库主键intpassword密码varcharlast_login最近登录时间datetimeis_superuser是否超级管理员tinyintuser_name用户账号varcharemail邮箱varcharis_staff是否登录admin后台tinyintis_active是否激活tinyintdate_joined账号创建时间datetime
3.2 User模型内置方法
内置方法名称说明authenticate(username, password)用于用户认证。认证成功,则返回一个User对象login(HttpRequest, user)用于用户登录。user参数是经过认证的User对象。登录成功后将用户身份信息记录到请求的会话对象中存储。后台使用request.user可获取当前登录的用户对象。如果未登录成功,则request.user得到的是一个匿名用户对象。is_authenticated()判断当前用户是否经过认证logout(request)清除当前请求,注销会话create_user()创建新用户,至少提供用户名和密码set_password(password)修改密码check_password(password)检查密码是否正确
上述内置方法,可以在用户校验时为我们提供巨大的方便。
用户创建项目和应用后,执行完数据迁移,后台会生成一套auth开头的用户权限数据表。
4 用户注册
在视图文件views.py中:
# # 导入模块from django.shortcuts import render, redirect
from django.http import HttpResponse, JsonResponse
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, logout
defregister(request):if request.method =='GET':return render(
request,'basic/register.html')elif request.method =='POST':# 获取参数
user_name = request.POST.get('username','')
pwd = request.POST.get('password','')# 用户已存在if User.objects.filter(username=user_name):return JsonResponse({'code':200,'msg':'用户已存在'})# 用户不存在else:# 使用User内置方法创建用户
user = User.objects.create_user(
username=user_name,
password=pwd,
email='[email protected]',
is_staff=1,
is_active=1,
is_superuser=0)return JsonResponse({'code':200,'msg':'用户注册成功'})else:return JsonResponse({'code':403,'msg':'被禁止的请求'})
5 用户登录
在视图文件views.py中:
"""此处导入的模块和注册是一样的"""deflogin(request):if request.method =='GET':return render(
request,'basic/login.html',)elif request.method =='POST':# 获取参数
user_name = request.POST.get('username','')
pwd = request.POST.get('password','')# 用户已存在if User.objects.filter(username=user_name):# 使用内置方法验证
user = authenticate(username=user_name, password=pwd)# 验证通过if user:# 用户已激活if user.is_active:return JsonResponse({'code':200,'msg':'登录成功'})# 未激活else:return JsonResponse({'code':200,'msg':'用户未激活'})# 验证失败else:return JsonResponse({'code':403,'msg':'用户认证失败'})# 用户不存在else:return redirect('/basic/register')
6 用户登出
"""此处导入的模块和注册是一样的"""deflogout(request):
logout(request)return redirect('/basuc/login')
以上。
版权归原作者 勇敢牛马 不怕困难 所有, 如有侵权,请联系我们删除。