Django Session会话
出于安全原因,Django有一个会话框架来处理Cookies。 会话用于抽象的接收和发送cookie,数据保存在服务器端(如数据库),而客户端的cookie只是有识别会话ID。会话也有助于避免在用户浏览器设置为“不接受”cookies行为。
设置会话
在Django中,使会话在项目 settings.py 完成,通过添加一些行到MIDDLEWARE_CLASSES和INSTALLED_APPS选项。这应该在创建项目完成,但它总是很容易知道,所以MIDDLEWARE_CLASSES应该类似如下 −
'django.contrib.sessions.middleware.SessionMiddleware'
'django.contrib.sessions'
默认情况下,Django在数据库保存会话信息(表django_session中或集合),但可以用其他的方式类似配置的引擎存储的信息:在文件中或在缓存中。
让我们创建一个简单的示例,看看如何创建和保存会话。我们之前已经建立了一个简单的登录系统(见Django的表单处理的章节和Django的Cookies处理一章)。让我们保存用户名在cookie。因此如果不注销,访问我们的登录页面时,你不会看到登录表单。 在Django通过保存Cookie在服务器端,使用cookies处理更加安全。
def login(request): username = 'not logged in' if request.method == 'POST': MyLoginForm = LoginForm(request.POST) if MyLoginForm.is_valid(): username = MyLoginForm.cleaned_data['username'] request.session['username'] = username else: MyLoginForm = LoginForm() return render(request, 'loggedin.html', {"username" : username}
def formView(request): if request.session.has_key('username'): username = request.session['username'] return render(request, 'loggedin.html', {"username" : username}) else: return render(request, 'login.html', {})
现在,让我们修改url.py文件并更改URL,因此配对新视图 −
from django.conf.urls import patterns, url from django.views.generic import TemplateView urlpatterns = patterns('myapp.views', url(r'^connection/','formView', name = 'loginform'), url(r'^login/', 'login', name = 'login'))
当访问 /myapp/connection,将能看到如下页面−
def logout(request): try: del request.session['username'] except: pass return HttpResponse("<strong>You are logged out.</strong>")
url(r'^logout/', 'logout', name = 'logout'),
可能使用会话的一些动作
我们已经看到如何存储和访问会话,下面是一个很好的了解请求的会话属性还有其他一些有用的操作,如 -
-
set_expiry (value) − 设置会话的过期时间
-
get_expiry_age() − 返回直到会话过期的秒数
-
get_expiry_date() − 返回本会话将到期的日期
-
clear_expired() − 从会话中删除过期的会话存储
-
get_expire_at_browser_close() − 返回true或false,具体取决于用户的会话cookie是否已过期在用户的Web浏览器关闭时