美文网首页
django中级 --- 用户认证

django中级 --- 用户认证

作者: 梦想做小猿 | 来源:发表于2017-01-04 14:41 被阅读0次

    说明

    django通过提供User、auth方法实现用户登录认证,权限管理等功能

    一:用户认证

    用户登录,判断用户名和密码是否正确,判断该账户是否锁定等。

    #coding=utf8
    from django.shortcuts import render_to_response,redirect
    from django.template import RequestContext
    from django.contrib import auth
    from django.contrib.auth.decorators import login_required
    
    def Login(request):
        if request.method == "GET":
            return render_to_response("login.html",context_instance=RequestContext(request))
        else:
            username = request.POST.get('username',None)
            password = request.POST.get('password',None)
            userinfo = auth.authenticate(username=username,password=password)
            if userinfo:
                if userinfo.is_active:
                    auth.login(request,userinfo)
                    return redirect('/')
            return render_to_response("login.html",{"errmsg":"用户名或密码错误"},context_instance=RequestContext(request))
    
    @login_required
    def Index(request):
        return render_to_response("test.html")
    
    @login_required
    def Logout(request):
        auth.logout(request)
        return redirect("/login")
    

    代码解释:

    • render_to_respinse中使用context_instance=RequestContext(request),是因为django post提交的时候会防止跨域请求csrf验证,解决此问题方法
    1. 在前端form表单中添加
    <form method="post" action="/login">{% csrf_token %}
    
    1. 在视图函数中使用RequestContext
     return render_to_response("login.html",context_instance=RequestContext(request))
    
    • auth.authenticate方法为验证输入的表单的用户和密码是否正确,如果正确则返回用户对象,如果不正确则返回None
    • is_active 判断用户账号是否被锁定,对应用户创建时数据表字段is_active,默认为True,True:1,False:0
    • auth.login,django登录用户,需传入用户对象,默认将用户id写入session
    • auth.logout,django登出用户,如果用户没有登录,使用该方法不会报错
    • login_required装饰器,判断用户是否登录,如果没有登录则跳转到登录页,django默认登录页为"accounts/login/",自定义该地址:
    #在setting.py中添加
    LOGIN_URL = "/login"
    

    相关文章

      网友评论

          本文标题:django中级 --- 用户认证

          本文链接:https://www.haomeiwen.com/subject/yjjnvttx.html