在没有登陆的情况下,我们访问管理系统的某个页面时,应该跳转到 login 页面,这个时候需要用到 from django.contrib.auth.decorators import login_required
这个模块,里面有一个 login_required 装饰器,只要哪个视图函数使用了这个装饰器,就是告诉django,调用这个方法是需要登陆的。
如果没有登陆,会默认跳转到 '/accounts/login/' 这个值是可以在 settings 里设置的,如 LOGIN_URL = '/accounts/login/'
, 如果访问king_admin,则跳转后的url是 '/accounts/login/?next=king_admin/'
我们可以通过request.GET.get 得到 next 用来登陆成功后redirect到这个页面
from django.shortcuts import render,redirect
from django.contrib.auth import login, logout, authenticate
# Create your views here.
def acc_login(request):
error = ''
if request.method == 'POST':
_email = request.POST.get('email')
_password = request.POST.get('password')
user = authenticate(username=_email, password=_password)
# 如果有返回值,返回的是用户对象,没有就是 None,认证不通过
# 这一步只是验证
if user:
login(request, user)
# 这一步就是登陆,login会与数据库交互,会创建sesson使下次登陆不需验证
next = request.GET.get('next')
if next:
return redirect(next)
return redirect('/')
else:
error = 'Wrong username or password!'
return render(request, 'login.html', {'error':error})
注销只需要这样
def acc_logout(request):
logout(request)
return redirect('/account/login/')