zoukankan      html  css  js  c++  java
  • drf框架之跨域问题的解决与缓存问题

    什么是跨域问题呢:

    1. 跨域问题:
        CORS 跨域资源共享: 有简单请求 和非简单请求
    
        简单请求:
            只要符合如下两条,就是简单请求,否则则是非简单请求
                (1)
                请求方法是以下三种方法之一:
                HEAD
                GET
                POST
                (2)
                HTTP的头信息不超出以下几种字段:
                Accept
                Accept - Language
                Content - Language
                Last - Event - ID
                Content - Type:只限于三个值application / x - www - form - urlencoded、multipart / form - data、text / plain
    
        简单请求只发一次请求
        非见到你请求发两次:一次是OPTIONS预检请求,预检请求同意我发,我再发起第二次真实请求,一次是真实的请求
    
    处理跨域问题(可以使用django-cors-headers 模块)

    2. 如何处理?

    可以自己处理: 创建一个文件:
    第一步:
    class MyMiddleware(MiddlewareMixin):
        def process_response(self, request, response):
            # 处理了简单请求
            response['Access-Control-Allow-Origin'] = '*'
            # 处理非简单请求
            if request.method == 'OPTIONS':
                response['Access-Control-Allow-Headers'] = '*'
                # response['Access-Control-Allow-Methods']='PUT,PATCH'
                response['Access-Control-Allow-Methods'] = '*'
    
            return response

    3. 如何使用?

    第二步: 在setting文件内
    MIDDLEWARE = [
        'django.middleware.cache.UpdateCacheMiddleware',
        #处理跨域的中间件
        'app01.mycsrf.MyMiddleware',    #添加第一步写好的中间件配置信息
    
    
    #总结 jason 数据就是非简单请求  put,delete 也是非简单请求

    缓存问题

    1. 缓存到文件的方法:

    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',  # 指定缓存使用的引擎
            'LOCATION': 'D:lqzcache',  # 指定缓存的路径
            'TIMEOUT': 300,  # 缓存超时时间(默认为300秒,None表示永不过期)
            'OPTIONS': {
                'MAX_ENTRIES': 300,  # 最大缓存记录的数量(默认300)
                'CULL_FREQUENCY': 3,  # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
            }
        }
    }
    在settings中配置

    2. 使用缓存:

    -第二步:使用缓存
    -使用单页面缓存(使用装饰器):
    from django.views.decorators.cache import cache_page
    @cache_page(5)
    def cache_test(request):
        print('走视图函数')
        ctime=time.time()
        return render(request,'index.html',locals())
    View Code

    3. 局部缓存在前端页面的处理:

                    -页面局部缓存
                            {% load cache %}
                            #传两个参数:第一个参数是超时时间,第二个参数是key值,唯一的标志#
                            {% cache 5  'ttt'%}
                                当前时间是:{{ ctime }}
                            {% endcache %}
    前端html的处理

    4.全站缓存的配置中间件:

    MIDDLEWARE = [
        'django.middleware.cache.UpdateCacheMiddleware',
        #处理跨域的中间件
        'app01.mycsrf.MyMiddleware',
    
        'django.middleware.security.SecurityMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        # 'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
    
        'django.middleware.cache.FetchFromCacheMiddleware'
    ]
    
    CACHE_MIDDLEWARE_SECONDS=5        #定义缓存的时间
    在settings下配置如下
  • 相关阅读:
    数字以万做单位——Java
    创建二维码工具类——Java
    Java 截取指定长度的字符串
    堆排序
    context:component-scan 的使用说明
    @Autowired @Resource @Qualifier的区别
    声明对象和创建对象的区别
    maven 命令
    maven 创建
    maven pom.xml文件
  • 原文地址:https://www.cnblogs.com/gukai/p/10781097.html
Copyright © 2011-2022 走看看