说明
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验证,解决此问题方法
- 在前端form表单中添加
<form method="post" action="/login">{% csrf_token %}
- 在视图函数中使用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"