实现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/')
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 22年12月更新:个人网站关停,如果仍旧对旧教程有兴趣参考 Github 的markdown内容[https://...
    tangyefei阅读 35,254评论 22 257
  • Django认证系统的组成部分: User(用户) Permission(许可,定义一个用户的权限) Group(...
    Py_Bird阅读 4,021评论 0 2
  • 注解是一个类,一个声明就是一个对象 简单注解 @SuppressWarnings("msg") - 压缩/抑制警告...
    Josaber阅读 386评论 0 0
  • 今天的自由操作时间,楷楷选择了一份敲的工作。双手抓住托盘,顺利的把工作放到桌面,打开木盒取出钉子。一手扶住钉子,一...
    ic班阅读 232评论 0 0
  • 两个byte类型的数据相加时,各自自动提升为int类型,两个int数值相加的和可能会超过byte的范围,所以会报错
    黑白键盘阅读 211评论 0 0