django学习-路由和视图(下)

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处理后,按照注册顺序由下至上依次执行,就是返回来
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值