1. 程式人生 > >django文件中介紹的處理ajax post時,頭中新增csrf token的方法

django文件中介紹的處理ajax post時,頭中新增csrf token的方法

AJAX

While the above method can be used for AJAX POST requests, it has someinconveniences: you have to remember to pass the CSRF token in as POST data withevery POST request. For this reason, there is an alternative method: on eachXMLHttpRequest, set a custom X-CSRFToken header to the value of the CSRFtoken. This is often easier, because many JavaScript frameworks provide hooksthat allow headers to be set on every request.

上面的方法在每個post時,都要將CSRF token作為post資料來傳,不方便,可以設定一個值為CSRFtoken的X-CSRFToken頭,這樣就能一勞永逸。

Acquiring the token is straightforward:

// using jQuery
function getCookie(name) {
    var cookieValue = null;
    if (document.cookie && document.cookie !== '') {
        var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) { var cookie = jQuery.trim(cookies[i]); // Does this cookie string begin with the name we want? if (cookie.substring(0, name.length + 1) === (name + '=')) { cookieValue = decodeURIComponent(cookie.substring
(name.length + 1)); break; } } } return cookieValue; } var csrftoken = getCookie('csrftoken');

如果嫌上述函式實現複雜,可以試試下面的實現,區別是,需要引入

JavaScript Cookie:

<script src="https://cdn.jsdelivr.net/npm/[email protected]/src/js.cookie.min.js"></script>

The above code could be simplified by using the JavaScript Cookie library to replace getCookie:

var csrftoken = Cookies.get('csrftoken');

以下描述的是:給ajax設定一個頭的X-CSRFToken屬性,這樣每次發起post時,這個X-CSRFToken屬性會自動加入post的資訊中。

仔細看,可以猜到:beforeSend: function是一個類似callback的函式,每當post發起時,執行這個函式。函式裡的if還做了判斷,如果不是同一個域的請求,就不傳送csrftoken。

Setting the token on the AJAX request

Finally, you’ll have to actually set the header on your AJAX request, whileprotecting the CSRF token from being sent to other domains usingsettings.crossDomain in jQuery 1.5.1and newer:

function csrfSafeMethod(method) {
    // these HTTP methods do not require CSRF protection
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
    beforeSend: function(xhr, settings) {
        if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
            xhr.setRequestHeader("X-CSRFToken", csrftoken);
        }
    }
});

說明文件中還介紹了另外一種取csrftoken的方法:將csrftoken明文寫入網頁,在通過jquery取csrftoken值。

Acquiring the token if CSRF_USE_SESSIONS is True

If you activate CSRF_USE_SESSIONS, you must include the CSRF tokenin your HTML and read the token from the DOM with JavaScript:

{% csrf_token %}
<script type="text/javascript">
// using jQuery
var csrftoken = jQuery("[name=csrfmiddlewaretoken]").val();
</script>

這裡說的是:如果if CSRF_USE_SESSIONS is True,可以直接從html頁面讀取token的值。而且方法非常簡單。(滿足一般情況)

相關推薦

django介紹處理ajax post新增csrf token方法

AJAX¶While the above method can be used for AJAX POST requests, it has someinconveniences: you have to remember to pass the CSRF token in

當git上只做大小寫重命名的修改如何躲坑

function http ner ips %20 error: ace mbed lips 一、 提交時 假設修改ABC.java為Abc.java。 1.1 如果使用git命令進行僅涉及大小寫的重命名 1.1.1 設置git庫為大小寫敏感(不建議) $

關於ActivityA的FragmentA啟動ActivityBFragmentA的startActivityForResult回撥的問題

轉自:http://blog.csdn.net/buaaroid/article/details/48931883 如果我們在一個Fragment中去使用startActivityForResult時,又是一個什麼情況呢?先看流程圖: ---------

Django在同一個檢視處理ajax請求遇到的一些坑

在寫專案中遇到的一些ajax的坑,在這裡做一下記錄 一、先放一個完整的前,後端示例 $("#bTinvite").click(function(){ inviTtemail = $("#invitefriends").val(); // a

django使用jquery ajax post資料出現403錯誤的解決辦法(兩種方法)

 方法一: 在傳送post請求的html頁面前加入{% csrf_token %} 方法二: 在處理post資料的view前加@csrf_exempt裝飾符 例如 @csrf_exempt de

Linux常見日誌介紹

重新啟動 計算機 tmp 引導 syslog linux 消息 可能 錯誤 /var / log / cron:記錄crond計劃任務相關的時間信息; 一、內核及系統日誌分析 /var / log / messages:記錄Linux內核消息及各種應用程序的公共日誌信息,包

修改ini的批處理

arc 修改 cme nts dba wsb pla -c afr 用VBS更簡單: vbs代碼: On Error Resume Next Dim Fso,TxtFl,Str Set Fso = CreateObject("Scripting.FileSystemO

zabbix 歷史數據清理及libdata1過大處理

博客 查看 res oca localhost eight temp 51cto mysql 一 歷史數據清理 停止相關服務,避免寫入數據/etc/init.d/zabbix-server stop /etc/init.d/httpd stop 清空歷史數據m

系統移植(1)——根系統介紹

根文件系統介紹一:什麽是根文件系統 (1)首先明白一點,我們的文件在硬盤上的存儲並非是連續存放的,而是零散的存放在硬盤中的某些空余扇區中的,這就導致了我們很難去查看我們存放的文件(因為人無法記住所有文件存放在哪些扇區,已經扇區的順序),這時就有了我們的文件系統,所以簡單來講,文件系統就是對一個存儲設備上

、目錄處理命令

ls cp cat ls-a為--all 隱藏文件不是為了對系統或對人隱藏,是為了標記這是系統文件,防止誤操作-l為--long 權限中x是execute 權限夠用就好,能不給就不給-h為--human,人性化顯示-d 看本目錄,而不是目錄下的詳細信息,一般為ls -ld看目錄的詳細信息-i in

【java 讀寫操作】 生成隨機數寫入txt然後從txt讀出

進行 rac 直接 生成隨機數 catch trace buffered 代碼 tac 1.把生成的隨機數寫入到文件中 1 public static void WriterFun(){ 2 //獲得路徑 3 String filep

Django存儲(二)定制存儲系統

code div pic pool 靜態文件 pre i/o rect final 要自己寫一個存儲系統,可以依照以下步驟: 1.寫一個繼承自django.core.files.storage.Storage的子類。 from django.core.files.stor

scp 復制遠程 帶空格 處理

hit 反斜杠 斜杠 con -s class 註意 line var 我使用到的是從遠程的服務器上面下載文件到本地 語法 scp [email protected]:filepath local_direction_path 我有遇到一個問題 文件包含空格 轉義

Nginx 之 Nginx安裝和配置簡要介紹

安裝 配置文件 1 概述本文主要介紹了nginx的兩種安裝方法,通過yum和編譯安裝,同時對安裝後的配置文件的語法和格式進行了簡要的介紹2 nginx的安裝2.1 yum安裝nginx在光盤自帶的base源裏沒有,需要通過官方路徑或者是epel源中安裝.官方:http://nginx.org/pack

win7無法訪問共享夾故障處理

win7無法訪問共享文件夾Win7系統訪問局域網共享文件夾,提示找不到網絡路徑,錯誤代碼0X80070035。 首先ping對方IP地址,可以ping通,其他電腦也可以正常訪問,說明不是網絡問題,肯定是win7系統問題,用net share 查看共享服務是否應經開啟,共享開啟且防火墻已關閉,再次訪問還是

Nginx配置詳細介紹

nginx配置 Nginx的主配置文件為“/etc/nginx/nginx.conf”,在主配置文件中使用指令又包含了其他的片段配置文件“/etc/nginx/conf.d/”(源代碼安裝時可以自己指定配置文件位置)。在配置文件中首先需要知道兩個名詞,一個是“context”,上下文,代表的是指令的容器

Core產生及處理方式

大小 clas insert proc png 實現 gid uid 法則 core的信號處理方式 : 終止進程 + 產生core文件 當執行下面的代碼後,會出現段錯誤: 通常在linux中為了調試,快速找到出現問題的地方,會產生一個core文件 但一般來說,如果沒有經

【JS代碼壓縮】使用YUI Compressor對js進行壓縮處理

js代碼 bird spell 說明 ber enum ide relative auto 概述在使用html5開發Hybird APP的時候,可能會引入大量的js包,另外對於一些核心的js文件,進行一些特殊的處理,如壓縮和加密就顯得很重要了,YUI Compressor就

查看及內容處理命令 cat tac less head tail cut

lov oot lac mys root family pan oldboy mil cat 查看文件內容 [root@mysql tmp]# cat 2.txt 1234 -n 查看行號 [root@mysql tmp]# cat -n 2.txt ?????1

C#配置Section節點處理總結

mod ret pro one void apps 實時 title als 本文實例總結了C#配置文件Section節點處理方法。分享給大家供大家參考。具體如下: 很多時候在項目開發中,我們都需要用配置文件來存儲一些關於程序配置信息,這時候你可以選擇INI或者app.c