django 1.6.2 下session 与 cookies 的使用
2014-03-06 23:41
344 查看
首先强调版本是 1.6.2 低于这个版本的请自行查看版本间的差异
这里以一个简单的注册登录跳转为例说一下session 和 cookie的用法.
app的名字是 sessiontest
templates下模板 urls sessiontest.views sessiontest.forms sessiontest.models 文本代码如下:
templates下模板
#index.html
#register.html
#login.html
#welcome.html
urls.py文件:
# sessiontest.py文件
#forms.py 文件
#models.py
然后在setting.py 文件里面加上
SESSION_COOKIE_AGE = 60*10 (session过期时间,这里是以秒为单位)
以及
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
表示sessionid会存在于客户端的缓存中 (这个我还没弄明白原理是怎样)
session主要用到的方法为:
#取得某个session的值 若没有则为None
request.session.get("username",None)
#设置一个新的session的值 变量名字可以自行起
request.session["username"] = username
cookies的方法为:
#设置一个新的cookie account及其值 时间为600s 设置为-1则为永久
response.set_cookie("account",request.REQUEST.get("username"),10×60)
#获取一个cookie值
username = request.COOKIES.get("account",None)
更多session 和 cookie的使用方法请自行百度。
你会发现在成功登录一次之后,如果在session未过期期间再次登录则可直接进入.
若然session时间过了, 则在index.html页面会显示你为游客. 跳转到登录页面会里面的账户和密码已经帮你填好,这是cookie,直接登录即可。
假如你在登录期间改了密码,那么下次登录的时候表单里面依然是旧的密码,必然不能登录。
至于怎样刷新session的时间,貌似单纯用html是实现不了,据说用ajax可以实现,这个得研究研究.
还有一个就是你第一次登录,浏览器会询问你是否要记住密码,这个就是网站设置了cookie的效果,若你按否,浏览器就不会帮你生成这个cookies
这里以一个简单的注册登录跳转为例说一下session 和 cookie的用法.
app的名字是 sessiontest
templates下模板 urls sessiontest.views sessiontest.forms sessiontest.models 文本代码如下:
templates下模板
#index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"> <html lang="en"> <head> <title>Welcome!</title> </head> <body> <h2>欢迎你 {{ username }}</h2> <hr/> <p> {%if flag %} <a href="/logout/">注销</a> <a href="/welcome/">欢迎页面</a> {% else %} <a href="/login/">登陆</a> <a href="/register/">注册</a> {%endif%} </p> </body> </html>
#register.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"> <html lang="en"> <head> <title>Account Register</title> </head> <body><form action="" method="post"> <p>username: <input type="text" name="username" ></p> <p>password: <input type="text" name="password" ></p> <p> <a href="/login/">登陆</a> <a href="/index/">返回首页</a> <input type="submit" value="注册"/></p> </form> </body> </html>
#login.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"> <html lang="en"> <head> <script type="text/javascript" src="/static/jquery.js"></script> <script type="text/javascript" src ="/static/function.js"></script> <title>Account Login</title> </head> <body> <form action="" method="post"> <p>username: <input type="text" name="username" value={{ account }}></p> <p>password: <input type="password" name="password" value={{ password }}></p> <p> <a href="/register/">注册</a> <a href="/index/">返回首页</a> <input type="submit" value="登录"/> </p> </form> </body> </html>
#welcome.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"> <html lang="en"> <head> <title>Welcome!</title> </head> <body> <h2> 再次欢迎你 {{ username }}</h2> <hr/> <p> <a href="/logout/">注销</a> <a href="/index/">返回首页</a> </p> </body> </html>
urls.py文件:
from django.conf.urls import patterns, url, include urlpatterns = patterns('', (u'^login/$', 'sessiontest.views.login'), (u'^register/$','sessiontest.views.register'), (u'^index/$', 'sessiontest.views.index'), (u'^logout/$','sessiontest.views.logout'), (u'^welcome/$','sessiontest.views.welcome'), )
# sessiontest.py文件
#coding=UTF-8 from django.shortcuts import render_to_response from forms import RegisterForm,LoginForm from sessiontest.models import User from django.http import HttpResponseRedirect from django.http import HttpResponse def index(request): user = request.session.get("username",None) username = "游客" flag = False if user: username = user flag = True return render_to_response('index.html',locals()) def register(request): if request.method == 'POST': form = RegisterForm(request.POST) if form.is_valid(): username=form.cleaned_data["username"] password=form.cleaned_data["password"] user=User(username =username,password = password) user.save() request.session["username"] = username return HttpResponseRedirect("/index/") return render_to_response("register.html") def login(request): if request.method == 'POST': form = LoginForm(request.POST) if form.is_valid(): request.session["username"] = request.REQUEST.get("username") response = HttpResponseRedirect("/index/") response.set_cookie("account",request.REQUEST.get("username"),10) response.set_cookie("password",request.REQUEST.get("password"),10) return response username = request.COOKIES.get("account",None) password = request.COOKIES.get("password",None) p = User.objects.filter(username = username, password = password) if p: return render_to_response("index.html",locals()) return render_to_response("login.html") def logout(request): if request.session.get("username",None): del request.session["username"] return HttpResponseRedirect('/index/') def welcome(request): user = request.session.get("username",None) if not user: return HttpResponseRedirect('/login/') name = user return render_to_response('welcome again.html',locals())
#forms.py 文件
#coding=UTF-8 from django import forms from sessiontest.models import User class RegisterForm(forms.Form): username = forms.CharField(max_length=20) password = forms.CharField(max_length=20) def clean_username(self): username = self.cleaned_data.get("username","") users = User.objects.filter(username = username ) if not users: return username else: raise forms.ValidationError("该昵称已经被使用请使用其他的昵称") def clead_password(self): password = self.cleaned_data.get("password","") if len(password) == 0: return False return password class LoginForm(forms.Form): username=forms.CharField(max_length=20) password=forms.CharField(max_length=20) def clean_username(self): username = self.cleaned_data.get("username","") password = self.cleaned_data.get("password","") p = User.objects.filter(username = username) if not p: raise forms.ValidationError("Not enough words!") return self.cleaned_data["username"]
#models.py
from django.db import models class User(models.Model): username = models.CharField(max_length=20) password = models.CharField(max_length=20) def __unicode__(self): return self.username +" "+self.password
然后在setting.py 文件里面加上
SESSION_COOKIE_AGE = 60*10 (session过期时间,这里是以秒为单位)
以及
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
表示sessionid会存在于客户端的缓存中 (这个我还没弄明白原理是怎样)
session主要用到的方法为:
#取得某个session的值 若没有则为None
request.session.get("username",None)
#设置一个新的session的值 变量名字可以自行起
request.session["username"] = username
cookies的方法为:
#设置一个新的cookie account及其值 时间为600s 设置为-1则为永久
response.set_cookie("account",request.REQUEST.get("username"),10×60)
#获取一个cookie值
username = request.COOKIES.get("account",None)
更多session 和 cookie的使用方法请自行百度。
你会发现在成功登录一次之后,如果在session未过期期间再次登录则可直接进入.
若然session时间过了, 则在index.html页面会显示你为游客. 跳转到登录页面会里面的账户和密码已经帮你填好,这是cookie,直接登录即可。
假如你在登录期间改了密码,那么下次登录的时候表单里面依然是旧的密码,必然不能登录。
至于怎样刷新session的时间,貌似单纯用html是实现不了,据说用ajax可以实现,这个得研究研究.
还有一个就是你第一次登录,浏览器会询问你是否要记住密码,这个就是网站设置了cookie的效果,若你按否,浏览器就不会帮你生成这个cookies
相关文章推荐
- 在Django的视图(View)外使用Session的方法
- PHP 常用的时间函数,session、 cookies使用
- django之session使用的setting.py配置
- express 4 使用session和cookies
- django中使用redis保存session
- 在Django的session中使用User对象的方法
- Application Session Cookies等全局变量的使用区分
- 比较application,session,cookies,viewstate四个对象区别?(从原理,使用范围, 存取方法等方面来讨论)
- PHP - Manual手册 - CXLIX. Session 会话处理函数 - session.use_only_cookies指定是否在客户端仅仅使用 cookie 来存放会话 ID
- session和cookies在jsp中的使用方法
- django进阶之cookie和session的使用示例
- Session和Cookies的使用
- django处理cookies和session
- Ajax中如何使用Session变量,Cookies可以用表单验证的方式获取并使用。
- 在Django中使用缓存提供Session支持
- asp.net 使用cookies或者session实现浏览历史记录功能
- 面试题-禁用Cookies后,Session还可以使用吗?
- Django网站建设-用户登陆机制,session/cookies
- 在Django的视图(View)外使用Session的方法
- jsp session(会话) 的使用 cookies,application 理解