zoukankan      html  css  js  c++  java
  • 【DJango学习】构造响应对象 设置session cookie 类装饰器 钩子函数(middleware)

    响应信息:起始行,响应头,响应体 

    视图接收请求并处理后,必须返回HttpResponse对象或子对象 

    HttpResponse(content=响应体,content_type=相应数据类型,status=状态码) # 默认200 状态码

    JsonResponse 相应信息返回json字符串 

    return JsonResponse({"city":"beijing"})  # 不需要手动设置 响应头 content-type=application/json  和转换成json字符串 

    redirect 

    return redirect('/index.html') 配置reverse使用 尽量不要使用绝对路径

    设置cookie

     HttpResponse.set_cookie(cookie名 ,value = cookie值 ,max_age = cookie有效期 单位秒)

    request.COOKIES.get('cookie名')  # 获取cookie 字典类型 

    设置session  cookie是存储在本地浏览器,而session存储在服务器。存储在服务器的数据会更加的安全,不容易被窃取。

    广义 session机制 : 多次HTTP请求之间的关系 会话机制 状态数据 如:登陆状态 

    狭义 seesion数据 : 记录的状态数据  例如:登陆后记录的user_id 等等      

    Django默认存放在数据库中

    本地缓存需要修改 session_engine = Django.contrib.sessions.backends.cache 

    引用redis  

    1、安装拓展 pip install django-redis 

    2、配置  setting.py 

    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['key'] = value

    request.session.get['key']

    request.session.clear()  清空所有值

    request.session.flush()  清空整条 记录

    del request.session['key'] 删除 键值

    request.session.set_expiry(value)  0 -->临时会话 , 整数 单位秒 , None  两周默认值 

    session_cookie_age 秒为单位 全局默认值  

    装饰器调用

    # 装饰器
    def my_decorator(func): def wrapper(request,
    *args, **kwargs): print('自定义装饰器被调用了') print('请求路径%s' % request.path) return func(request, *args, **kwargs) return wrapper class DemoView(View): def get(self, request): print('get方法') return HttpResponse('ok') def post(self, request): print('post方法') return HttpResponse('ok')

    中间件

    middleware.py

    def my_middleware(get_response):
        # 编写执行前
        print("init 被调用")
    
        def middleware(request):
            # 调用前
            print("before request  被调用")
            response = get_response(request)
            # 调用后
            print("after request  被调用")
            return response
    
        return middleware

    settings.py

    MIDDLEWARE = ["middleware.my_middleware"
    ]

    类似于flask钩子函数 执行前 调用前 调用后  

    中间件执行顺序:调用自下而上 , before自上而下,after自下而上 

  • 相关阅读:
    let 和 const 命令
    字符串和数组之间相互转换
    angularjs 添加拦截器
    js判断数组是否包含指定元素的方法
    angularjs ng-include
    requirejs学习 关于requirejs的一些参数问题
    ngDialog 点击窗口以外不允许关闭弹窗
    jQuery Jcrop 图像裁剪
    Javascript模块化编程(三):require.js的用法
    angular.bootstrap手动加载angularjs模块
  • 原文地址:https://www.cnblogs.com/oscarli/p/12322697.html
Copyright © 2011-2022 走看看