Django 使用session 进行登陆校验
1.添加中间件
在创建项目的收默认已经添加
MIDDLEWARE_CLASSES = [ 'django.middleware.security.SecurityMiddleware', 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'adminManage.middleware.LoginIntercept' ]
2. 添加应用
创建项目时已默认添加
'django.contrib.sessions',
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
3.添加序列化组件
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
4.创建登陆账户对象
/project_name/app_name/models.py
# -*- coding: utf-8 -*-
from django.db import models
class Account(models.Model):
account_name = models.CharField(u'账号名', max_length=32)
password = models.CharField(max_length=32)
email = models.CharField(u'邮箱', max_length=32)
create_time = models.DateField(u'创建时间', auto_now_add=True, editable=False)
def __unicode__(self):
return '%s %s %s' % (self.account_name, self.email, self.create_time)
5. 创建自定义中间件,用于拦截所有访问
/project_name/app_name/middleware.py
# -*- coding: utf-8 -*-
from django.shortcuts import render, HttpResponseRedirect, HttpResponse, redirect
try:
from django.utils.deprecation import MiddlewareMixin # Django 1.10.x
except ImportError:
MiddlewareMixin = object # Django 1.4.x - Django 1.9.x
class LoginIntercept(MiddlewareMixin):
def process_request(self, request):
if request.path != '/login/' adn request.path != '/regist/':
if request.session.get('account'):
pass
else:
print "Intercept illegal access "
return HttpResponseRedirect('/login/')
6.views
创建登陆,登出方法,对session 注入和注销
# -*- coding: utf-8 -*-
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect
from django import forms
from models import Account
import datetime
# 登陆
def login(request):
if request.method == 'POST':
email = request.POST['email']
password = request.POST['password']
try:
account = Account.objects.get(email=email, password=password)
print '%s at %s login' % (account.account_name, datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
response = HttpResponseRedirect('/index/')
# response.set_cookie('account', account, 3600)
request.session['account'] = account
return response
except Exception, e:
print 'e.message:\t', e.message
errorMessage = "用户名或密码错误"
return render(request, 'adminManage/account/login.html', {'errorMessage': errorMessage})
else:
return render(request, 'adminManage/account/login.html')
# 退出
def logout(request):
try:
del request.session['account']
except KeyError:
pass
return render(request, 'adminManage/account/login.html')
7.配置app的url 和 templates
8.测试验证
没有什么是写一万遍还不会的,如果有那就再写一万遍。

浙公网安备 33010602011771号