Django的MVC架构(4)
来源:互联网 发布:linux 硬盘空间扩容 编辑:程序博客网 时间:2024/06/07 02:53
我胡汉三又回来了:)
------那就不写满袖河山,写草草浮生百年------
今儿个总结下网站的session功能。session机制存在的目的就是为了可以让浏览器记住用户。
cookie是网站通过客户端的浏览器在某些限定的硬盘位置中写入某些数据:cookie是网站记住我们之前一些浏览行为的原因。Django设计网站时可以使用如下代码来检查客户端浏览器是否接受cookie:
def index(request, del_pass = None): template = get_template('index.html') if request.session.test_cookie_worked(): request.session.delete_test_cookie() message = 'cookie supported!' else: message = 'cookie not supported!' request.session.set_test_cookie() html = template.render(locals()) return HttpResponse(html)cookie的工作原理是每一次request前后相互独立的,因此再测试是否支持cookie写入功能时要先写入一次测试数据(request.set_test_cookie()),在下一次request时才能够读出来看看有没有之前写入的数据。
窗体类处理的标准化做法:
一开始检查是否以POST方法进入此函数,若是就以login_form = forms.LOginForm(request.POST)取得登陆的窗体属性,并使用login_form.is_valid()询问窗体属性的正确性:不正确则显示提示信息,否则request.POST[]来取得相关数据。cookie是request中的一个字典COOKIES。注销操作只需要把cookie删除并重新导向index.html就可以了,示例代码如下:
def logout(request): response = redirect('/')#from django.shortcut import redirect response.delete_cookie(key) return response
设置cookie必须是在执行完HttpResponse之后,先以一个变量记录此实例(response = HttpRespoonse(html)),然后以response.set_cookie('key', value)形式把cookie放在response中。
session同样可以处理同一个浏览者跨网页的识别问题,而session把数据存放在服务端(cookie存放在客户端),客户端只存放一个识别的信息。session存在时间可通过set_expiry(value)来设置,该函数可设置的值和方式如下表:value内容说明整数内容以秒为时间设置session过期时间datetime格式设置到指定的时间点就过期0浏览器关闭时过期None使用系统默认设置查询session期限的函数如下表:
函数名称说明get_expiry_age()以秒为单位,返回还有多长时间session过期get_expiry_date()返回session到期时刻get_expiry_at_brower_close()返回浏览器关闭时session是否到期,True或Falsesession中的数据存储依然是字典的形式。不同于cookie,session直接可以通过reqest设置:request.session['key'] = value,查询也可通过value = request.session['key']来取值。
许多暂时性的信息很有用,比如‘成功登陆’,Django针对这个功能提供了一个messages framework,只要from django.contrib import messages就可以通过它提供的函数和框架自动实现跨网页显示信息。主要提供两个函数:
from django.contrib import messagesmessages.add_messagfe(request, messages.INFO/DEBUG/SUCCESS/WARNING/ERROR, '想要显示的字符串')messages.get_messages(request)
其中,add_messages用来加上一段消息,消息内容默认分为以下几个等级:DEBUG,INFO,SUCCESS,WARNING,ERROR
对应到几个消息等级也可以用以下函数来简化:
messages.debug(request, 'Debugging')
messages.info(request, 'Information')
messages.success(request, 'Success')
messages.warning(request, 'Warning')
messages.error(request, 'Error')
messages.error(request, 'Error')
以上,我们可以通过session/cookie设计出浏览器是否记住用户的行为,若将Django用于admin管理网页这套系统中,程序可以进一步简化,不需自行设置session变量。
Django对象在auth.models中,使用之前需要导入:
from django.contrib.auth.models import UserUser默认属性有username, password, email, first_name, last_name。创建用户的语句如下:
user = User.objects.create_user()修改属性时也很简单:
user.last_name = 'balabala'user.save()Django.contrib.auth提供了三个主要函数:authenticate, login, logout。
from django.contrib import authuser = authenticate(username, password)# 若user不为空,则可使用auth.login(request, user)#将此用户的数据存入session中
#auth.logout(request)来登出用户之后我们可以使用request.user.is_authenticated()函数来检查用户是否已经登录。
由于django.contrib.authmodels中的User只提供了五个字段,往往不够用,有时需要增加新的字段:
class Profile(models.Model): user = models.OneToOneField(User, on_delete = CASCADE) new_attribute1 = balabala new_attribute2 = balabalaOneToOneField有没有和ForeignField很像2333……OTOF也就是每个Profile只能和一个User对应。
阅读全文
0 0
- Django的MVC架构(4)
- Django的MVC架构(1)
- Django的MVC架构(2)
- Django的MVC架构(3)
- Django的MVC架构(5)
- Django的MVC结构
- 运用 Ext JS 4 的 MVC 架构
- 运用 Ext JS 4 的 MVC 架构
- 运用Ext JS 4的MVC架构
- 运用Ext JS 4的MVC架构
- mvc架构的回顾
- MVC的三层架构
- MVC架构的参考
- MVC架构的缺点
- 架构:Android的MVC
- MVC架构的理解
- 基本的 MVC 架构
- C#的MVC架构
- X控件实战总结
- 如何正确地写出单例模式
- sanlyShi的前端之路四:meta,关于手机端的参数
- H5+CSS3玩转骰子
- ajax如何实现页面局部跳转与结果返回
- Django的MVC架构(4)
- 最好理解的并查集详解
- __name__ == '__main__'讲解
- 前端图片在线转换Base64 图片编码Base64
- geopackage-android 开源的地理空间信息数据库存储
- CI/CD/CD
- java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal res
- BZOJ 2257: [Jsoi2009]瓶子和燃料 裴蜀定理
- 1 数据结构和算法笔记目录