?從Django 1.9工程移過來的中間件功能底哗,到Django1.11突然不可用了?
TypeError: __init__() takes 1 positional argument but 2 were given
原來是中間件的初始化出現(xiàn)了問題些阅。
趕緊查查Django1.11的文檔
Django1.10版本前:
一 個(gè) middleware 類可以包括請求響應(yīng)過程的四個(gè)階段:request,view,response 和 exception。對應(yīng)的成員函數(shù):process_request崎场,process_view, process_response 和 process_exception仰禀。其中初始化的 __init__初始化函數(shù)不需要傳參照雁。
Django1.10版本后:
一 個(gè) middleware 類只有一個(gè)成員變量get_response,兩個(gè)成員函數(shù)__init__答恶,__call__。
?get_response是__init__時(shí)的初始化時(shí)的必要參數(shù)萍诱,在整個(gè)訪問中只調(diào)用1次悬嗓,__call__執(zhí)行主要的功能。
可在__call__中調(diào)用之前實(shí)現(xiàn)的process_request或者process_response方法裕坊。
Django 1.11的官網(wǎng)文檔:https://docs.djangoproject.com/en/dev/topics/http/middleware/
Django1.9 講的很清楚的中間件功能:https://www.cnblogs.com/felo/p/5600549.html