实现django的用户认证登陆

在没有登陆的情况下,我们访问管理系统的某个页面时,应该跳转到 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/')

你可能感兴趣的:(实现django的用户认证登陆)