前端教程:DjangoSession会话

开课吧开课吧锤锤2021-08-13 14:19

如前所述,我们可以在Web应用程序客户端使用Cookie来存储大量的有用数据。 我们在此之前已经看到了可以使用客户端的cookie存储各种数据,在Web应用程序这是非常有用的。这就导致了很多要保存数据的重要性和一些安全漏洞问题。  

前端教程L:DjangoSession会话

出于安全原因,Django有一个会话框架来处理Cookies。 会话用于抽象的接收和发送cookie,数据保存在服务器端(如数据库),而客户端的cookie只是有识别会话ID。会话也有助于避免在用户浏览器设置为“不接受”cookies行为。  

设置会话  

在Django中,使会话在项目settings.py完成,通过添加一些行到MIDDLEWARE_CLASSES和INSTALLED_APPS选项。这应该在创建项目完成,但它总是很容易知道,所以MIDDLEWARE_CLASSES应该类似如下 −  

'django.contrib.sessions.middleware.SessionMiddleware'

INSTALLED_APPS应该有 -  

'django.contrib.sessions' 

默认情况下,Django在数据库保存会话信息(表django_session中或集合),但可以用其他的方式类似配置的引擎存储的信息:在文件中或在缓存中。  

当会话启用,每个请求(在Django任何针对第一个参数)有一个会话(字典)属性。  

让我们创建一个简单的示例,看看如何创建和保存会话。我们之前已经建立了一个简单的登录系统(见Django的表单处理的章节和Django的Cookies处理一章)。让我们保存用户名在cookie。因此如果不注销,访问我们的登录页面时,你不会看到登录表单。 在Django通过保存Cookie在服务器端,使用cookies处理更加安全。  

对于这一点,首先让我们改变登录代码以保存username在服务器端-  

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}

那么让我们来创建视图对应登录表单的视图,如果cookie设置将不会显示表单 -  

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,将能看到如下页面−  

前端教程L:DjangoSession会话

你会被重定向到下面的页面 -  

前端教程L:DjangoSession会话

现在,如果您尝试再次访问/myapp/connection,它会直接重定向到第二个屏幕。  

让我们创建一个简单的注销视图,用于清除Cookie。  

def logout(request):
   try:
      del request.session['username']
   except:
      pass
   return HttpResponse("<strong>You are logged out.</strong>")

并在myapp/url.py中配对URL注销  

url(r'^logout/', 'logout', name = 'logout'),

现在,如果访问/myapp/logout,将得到如下页面-  

前端教程L:DjangoSession会话

如果再次访问 /myapp/connection ,将会得到的登录表单(屏幕1)。  

可能使用会话的一些动作  

我们已经看到如何存储和访问会话,下面是一个很好的了解请求的会话属性还有其他一些有用的操作,如 -  

set_expiry(value) − 设置会话的过期时间  

get_expiry_age() − 返回直到会话过期的秒数  

get_expiry_date() − 返回本会话将到期的日期  

clear_expired() − 从会话中删除过期的会话存储  

get_expire_at_browser_close() − 返回true或false,具体取决于用户的会话cookie是否已过期在用户的Web浏览器关闭时  

以上就是开课吧广场小编为大家整理发布的“前端教程:DjangoSession会话”一文,更多Web教程相关内容尽在开课吧广场Web教程频道!

免责声明:本站所提供的内容均来源于网友提供或网络搜集,由本站编辑整理,仅供个人研究、交流学习使用。如涉及版权问题,请联系本站管理员予以更改或删除。
有用
分享
全部评论快来秀出你的观点
登录 后可发表观点…
发表
暂无评论,快来抢沙发!
云开发实战特训营