关于django的auth模块快速配置
话不多说,我们来快速配置一个django的auth模块
auth模块的功能:进行验证登录,注销,更改密码,保存登陆状态,判断登陆状态
命令相关:
1. 创建超级用户 python manage.py createsuperuser 2. 认证 校验用户名和密码 obj = auth.authenticate(request,username,password) 认证成功返回 对象 失败 None 3. 保存登录状态 记录到session login(request, user) 4. 注销 删除session logout(request) 5. 判断登录状态 request.user.is_authenticated() 6. 创建用户 from django.contrib.auth.models import User # 密码是明文的 User.objects.create(username=username,password=password) # 密码是密文的 普通用户 User.objects.create_user(**form_obj.cleaned_data) # 创建超级用户 User.objects.create_superuser(email='',**form_obj.cleaned_data) 7. 密码相关 # 检验密码 request.user.check_password('root1234') # 设置密码 request.user.set_password('admin1234') request.user.save()
补充:django自带的用户字段有时不满足我们的需求,这时候需要我们进行自定义
自定义步骤:
1 在settings.py中声明user表 :AUTH_USER_MODEL = "app01.UserInfo"
2 在models中导入: from django.contrib.auth.models import AbstractUser
3 创建model,只需要声明额外添加的字段:
class UserInfo(AbstractUser): phone = models.CharField(max_length=11)
配置完成:案例
from django.shortcuts import render, redirect
from django.contrib import auth
from django.contrib.auth.decorators import login_required
from app01.forms import RegForm
from django.contrib.auth.models import User,AbstractUser
from app01.models import UserInfo
def login(request):
if request.method == 'POST':
# 方法一
username = request.POST.get('username')
password = request.POST.get('password')
obj = auth.authenticate(request, username=username, password=password)
# 方法二
# request.POST.pop('csrfmiddlewaretoken')
# obj = auth.authenticate(request, **request.POST)
# print(obj)
if obj:
# 记录登录状态
auth.login(request, obj)
next = request.GET.get('next')
if next:
return redirect(next)
return redirect('/index/')
# 返回登录页面
return render(request, 'login.html')
@login_required
def index(request):
# 登录状态
# print(request.user.is_authenticated())
print(request.user.password)
if request.user.check_password('root1234'):
request.user.set_password('admin1234')
request.user.save()
return render(request, 'index.html')
# 注销
def logout(request):
auth.logout(request)
return redirect('/login/')
def reg(request):
form_obj = RegForm()
if request.method == 'POST':
form_obj = RegForm(request.POST)
if form_obj.is_valid():
# 数据库操作
# username = form_obj.cleaned_data.get('username')
# password = form_obj.cleaned_data.get('password')
#
# UserInfo.objects.create(username=username,password=password)
form_obj.cleaned_data.pop('re_password')
UserInfo.objects.create_user(is_staff=1, **form_obj.cleaned_data)
# 创建超级用户
# UserInfo.objects.create_superuser(email='', **form_obj.cleaned_data)
return redirect('/login/')
return render(request, 'reg.html', {'form_obj': form_obj})

浙公网安备 33010602011771号