状态保持
cookie
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进行对比