码迷,mamicode.com
首页 > 其他好文 > 详细

自定义用户登录,会话保持,自动跳转

时间:2016-04-26 15:40:28      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:

自定义用户登录,使用自定义的表存放用户信息,使用session保持会话连接,在关闭浏览器后session过期,登录后可以自动跳转会原来的页面:

session管理:http://www.cnblogs.com/dreamer-fish/p/5434962.html

# -*- coding: UTF-8 -*-
from django.shortcuts import render
from django.http import HttpResponse,HttpResponseRedirect
from django.core.urlresolvers import reverse
from django.contrib.auth import authenticate,login as auth_login,logout as auth_logout
from aptest.forms import hvform,testform,vmform,lusersform
from aptest.models import lusers
import time
# Create your views here.

global user_loggedin,login_url,index_url
user_loggedin=Guest #设置未登录的默认用户名为Guest
login_url = ../login #设置登录页面url
index_url = ../ #设置登陆成功后跳转到主页url

#定义登录检查函数 def login_req(url=login_url): def getFun(func): def wrapper(request,*args, **kv): global user_loggedin #将user_loggedin设置为global,否则其他view获取不到该值 request.session[backurl] = request.path #获取当前页面的url,登录成功后自动跳转回该页面,获取不到则为None #request.session.set_expiry(1800) userinfo = request.session.get(s_username,None) #获取session,如果获取不到则设置为None if not userinfo: return HttpResponseRedirect(url) #没有登录,则跳转到登录页面 else: user_loggedin=request.session[s_username] #获取当前登录用户名 return func(request,*args, **kv) return wrapper return getFun #定义主页函数 def index(request): return HttpResponse(u"欢迎光临 aa!") @login_req() def add(request): a=3 b=55 c=int(a)+int(b) err=[] if request.method == POST: #print request.POST[‘hvname‘],request.POST[‘hvip‘] print request.method form = hvform(request.POST) if form.is_valid(): #判断输入数据是否合法 #print form #print form.cleaned_data[‘name‘],form.cleaned_data[‘ip‘] fc = form.cleaned_data print fc[name],fc[ip] else: err.append(form.errors) #输出错误信息 else: form = hvform() hour_offset= time.ctime() ls = range(10) context={hour_offset:hour_offset,ls:ls,err:err,user_loggedin:user_loggedin} return render(request,aptest/form.html,context) @login_req() #使用装饰函数,登录前检查是否已登录 def testvw(request): err=[] if request.method == POST: print request.method form = vmform(request.POST) if form.is_valid(): #判断输入数据是否合法 fc = form.cleaned_data print fc[hvname],fc[name],fc[cpu] else: err.append(form.errors) #输出错误信息 else: form = vmform() context={err:err,user_loggedin:user_loggedin} return render(request,aptest/current_datetime.html,context) #定义用户登录函数,并判断登录后是否自动跳转到前一个页面,还是跳转到主页 def login(request): global user_loggedin errors_list=[] if request.method == POST: form = lusersform(request.POST) if form.is_valid(): fc = form.cleaned_data #print fc[‘name‘],fc[‘password‘] try: usero = lusers.objects.get(name=fc[name]) if usero.password == fc[password]: request.session[s_username] = usero.name #设置该用户的session user_loggedin = usero.name #获取登陆后用户的用户名 #print ‘login -get backurl: ‘,request.session.get(‘backurl‘),request.session[‘s_username‘] if request.session.get(backurl) is not None: #检查跳转前的url是否存在 redirecturl = request.session[backurl] else: redirecturl = index_url #跳转前的url不存在则跳转到主页 return HttpResponseRedirect(redirecturl) else: errors_list.append(password is not correct!) except Exception: errors_list.append(fc[name] + Doesnot Exists) else: errors_list.append(form.errors) #输出字段格式错误信息 else: form = lusersform() context={errors_list:errors_list,user_loggedin:user_loggedin} return render(request,aptest/login.html,context)
#定义注销函数
def logout(request): try: #删除保存用户名和跳转前url的session del request.session[s_username] del request.session[backurl] except KeyError as e: pass #注销登陆后跳转到原页面 #return HttpResponseRedirect(request.META.get(‘HTTP_REFERER‘, ‘/‘)) return HttpResponseRedirect(../login)

修改关闭浏览器后session过期:

1.在settings.py最后一行添加 SESSION_EXPIRE_AT_BROWSER_CLOSE=True 
2.清空已保存的session:delete from django_session
3.清空IE缓存
4.重新测试OK,使用print request.session.get_expire_at_browser_close()查看session是否在浏览器关闭后失效

 

自定义用户登录,会话保持,自动跳转

标签:

原文地址:http://www.cnblogs.com/dreamer-fish/p/5435274.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!