django文档总结之会话保持、视图、中间件(2)

状态保持

1 在浏览器中以键-值存储;默认过期时间为关闭浏览器时

2 基于域名安全,不同cookie不能互相访问

3 浏览器会自动将cookie信息包含在请求头中发送给服务器

写入:response.set_cookie(键,值,max_age=秒)

读取:name = request.COOKIES.get(键)   	return HttpResponse(name)

删除:response.delete_cookie(键)

session

1 在数据库中以键-值存储;默认过期2周

2 终端安装扩展:

pip install django-redis

3 settings.py中的MIDDLEWARE中默认启动session

4 在settings.py中配置django的缓存,设置session的存储方案

配置django的缓存:获取耗资源,数据变化小

CACHES = {

    "default": {

        "BACKEND": "django_redis.cache.RedisCache",

        # 可以修改:reides的服务器ip,端口,数据库

        "LOCATION": "redis://127.0.0.1:6379/1",

        "OPTIONS": {

            "CLIENT_CLASS": "django_redis.client.DefaultClient",

        }

    }

}

设置session的存储方案:与cache一致

SESSION_ENGINE = "django.contrib.sessions.backends.cache"

SESSION_CACHE_ALIAS = "default"
写入:request.sesison[键]=值 request.session.set_expiry(秒)

读取:name = request.session.get(键)

	return HttpResponse(name)

删除:del request.session['键']

类视图

类视图使用

好处:代码可读性好,可以将不同的请求方式定义成不同的函数,但可以共用同一个请求地址

1 定义类RegisterView,继承于View,导入(from django.views import View)

2 在类中定义函数:函数名为请求方式的小写

3 注册类视图路由:url('^RegisterView$', views.RegisterView.as_view())

类视图使用装饰器

1 在新文件decorators.py 中定义装饰器

def register(f):

	def fun(*args, **kwargs):

		print("-----自定义装饰器被调用")

		return f(*args, **kwargs)

	return fun

2 在类视图中的函数上添加

导入 from . import decorators

类里的函数前加@decorators.register

3 直接在类视图上添加

导入 from django.utils.decorators import method_decorator

类上加 @method_decorator(decorators.register, name='dispatch')

(装饰器名称,name='实例方法的名称')--dispatch(表示全部)

4 (不推荐使用)可以使用装饰器的原生语法:装饰器(函数)

5 使用多继承扩展类***Mixin

中间件

使用:1类似于装饰器;2定义类(了解)

1 在新文件middleware.py 中定义中间件

def my_middleware(view_fun):

	def func1(*args, **kwargs):

		print("----视图执行前处理的代码")

		response = view_fun(*args, **kwargs)

		print("----视图执行后处理的代码")

		return response

	return func1

2 注册:settings.py中MIDDLEWARE['users.middleware.my_middleware',]

3 多个中间件执行顺序:

以视图函数为分界

视图执行前按注册顺序由上向下

视图执行后按注册顺序由下向上

4 CSRF中间件

  • 将token保存在session或cookie中
  • 请求为POST等请求时,从请求报文中获取token,并从存储中获取token
  • 将两个token进行对比
原文地址:https://www.cnblogs.com/davis12/p/14376821.html