6.cookie:
设置:
HttpResponse.set_cookie(cookie名, value=cookie值, max_age=cookie有效期,单位为秒)
读取:
request.COOKIES.get('itcast1')
session:
session可以写入数据库或者本地缓存,或者混合 -> 实际写入redis
安装扩展: pip install django-redis
添加配置:
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"
session操作
request.session['键']=值
request.session.get('键',默认值)
request.session.clear() 删除值
request.session.flush() 删除整条数据
del request.session['键'] 指定键及值
request.session.set_expiry(value) 有效期
7.类视图 : django中不写函数视图 ,而使用类视图
class RegisterView(View):
def get(self, request):
def post(self, request):
路由注册: 把类视图注册进去使用as_view
url(r'^register/$', views.RegisterView.as_view(), name='register')
8.类视图 使用装饰器
装饰器函数: def my_decorator(func)
方法一:在URL配置中装饰,不建议,函数维护不完整,因为装饰器写在url中了
url(r'^demo/$', my_decorator(DemoView.as_view()))
方法二:在类视图中装饰具体方法
不能直接添加装饰器,需要使用method_decorator将其转换为适用于类视图方法的装饰器
@method_decorator(my_decorator)
1.在类里边:
# 为全部请求方法添加装饰器
@method_decorator(my_decorator)
def dispatch(self, *args, **kwargs):
return super().dispatch(*args, **kwargs)
# 为特定请求方法添加装饰器
@method_decorator(my_decorator)
def get(self, request):
2.在类外边:(建议) 用name指明装饰谁
# 为全部请求方法添加装饰器
@method_decorator(my_decorator, name='dispatch')
class DemoView(View):
# 为特定请求方法添加装饰器
@method_decorator(my_decorator, name='get')
class DemoView(View):
方法三:使用 Mixin 扩展类 : 面向对象多继承的特性
class MyDecoratorMixin(object): 必须继承object
@classmethod
def as_view(cls, *args, **kwargs): 还是像方法一在url中装饰相同的套路
view = super().as_view(*args, **kwargs) 继承原有的内容
view = my_decorator(view) 然后装饰器装饰
return view 正常走下去,给到具体的get或者post
class DemoView(MyDecoratorMixin, View): 无论继承谁,最后都需要View类
def get(self, request):
def post(self, request):
9.中间件 : flask请求钩子
需要自己写自定义中间件(就是个闭包装饰器啊)
def 中间件名字(get_response):
# 此处编写的代码仅在Django第一次配置和初始化的时候执行一次。
(request_before_first)
def middleware(request):
# 此处编写的代码会在每个请求处理视图前被调用。
(request_before)
response = get_response(request)
# 此处编写的代码会在每个请求处理视图之后被调用。
(request_after)
return response
return middleware
写到单独的middleware.py文件中
注册到 settings.py 的 MIDDLEWARE = ['users.middleware.my_middleware'] 中
子应用.模块.函数方法(中间件名字)
多个中间件的执行顺序:
视图get_response处理前,按照注册顺序由上至下依次执行
视图get_response处理后,按照注册顺序由下至上依次执行,就是返回来