1. 程式人生 > >drf框架之跨域問題的解決與緩存問題

drf框架之跨域問題的解決與緩存問題

content com 超時 pda cti header event port ade

什麽是跨域問題呢:

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:\lqz\cache,  # 指定緩存的路徑
        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下配置如下

drf框架之跨域問題的解決與緩存問題