1.内置用户模块
from django.contrib.auth.model import User
2.登录模块
1)验证账号密码是否正确
django.contrib.auth import authenticate
user = authenticate(username=..,password=..)
2)记录用户状态,状态保持
django.contrib.auth improt login
login(request, obj对象)
将对象存储在系统中,后续可以在任何地点通过request.obj对象 直接使用
3)logout退出系统
django.contrib.auth improt logout
logout(request)
清空该请求对应会话中的所有数据
# (authenticate)验证用户账号密码是否正确函数
# (login)记录用户状态
# (logout)用户退出函数
from django.contrib.auth import authenticate, login, logout
def user_login(request):
username = request.POST.get('username')
userpass = request.POST.get(''userpass)
# 验证账号,密码是否正确
user = authenticate(username=username, password=userpass)
if user is not None:
if user.is_active:
# 记录登录状态
login(request, user)
# 调到首页
return HttpResponseRedirect('/')
else:
return render(request, 'user/login', {'msg': '账号已经被锁定'})
else:
return render(request, 'user/login', {'msg': '账号或密码有误'})
3.登录认证
from django.contrib.auth.decorators import login_requried
@login_required装饰器 ~添加到函数上,要求被装饰的函数必须具有登录权限才能访问,否则跳到指定页面[LOGIN_URL]
(1)需求分析
1)当我们在网页上点击了某个链接,跳转到登录页面
2)当我们完成登录后,没有跳转到首页,直接跳转到登录前访问的那个页面
(2)过程分析
1)Django中,当用户没有登录访问某个特殊函数[@login_required]修饰的函数
2)跳转到登录界面,用户登录,并附带了一个参数next(包含的就是用户即将访问的页面路径)
3)用户登录成功后,就可以直接跳转到next指定的路径
setting.py文件中要加上以下代码
LOGIN_URL = '/user/login/'
def user_login(request):
if request.method == 'GET':
next = request.GEt.get('next')
if next is None:
next = '/'
return render(request,'user/login.html', {'next':next})
elif request.method == 'POST':
username = request.POST.get('username')
userpass = request.POST.get('userpass')
next = request.POST.get('next')
# 验证账号
user = authenticate(username=username, password=userpass)
if user is not None:
if user.is_active:
# 记录登录状态
login(request, user)
# 跳转到登录前的界面
return HttpResponseRedirect(next)
else:
return render(request, 'user/login', {'msg': '账号已经被锁定'})
else:
return render(request, 'user/login', {'msg': '账号或密码有误'})
<!--h5代码-->
<form action='/user/login' method='POST'>
{%csrf_token %}
<!--隐藏的next值-->
<input type='hidden' name='next' value='next'>
<input type='text' name='username' value='username'>
<input type='password' name='userpass' value='userpass'>
<input type='submit' value='提交'>
</form>
4.请求方式装饰器
添加到视图处理函数上,要求视图处理函数必须通过指定的请求方式访问,否则405(请求不支持)
from django.views.decorators.http import request_GET/request_POST
from django.views.decorators.http import request_GET/request_POST
# 定义一个函数
@request_GET
def login(request):
pass