django-csrf使用和禁用方式
orm表單使用csrf
a. 基本應(yīng)用
form表單中添加
{% csrf_token %}
b. 全站禁用
# 'django.middleware.csrf.CsrfViewMiddleware',
c. 局部禁用
'django.middleware.csrf.CsrfViewMiddleware',
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def csrf1(request):
if request.method == 'GET':
return render(request,'csrf1.html')
else:
return HttpResponse('ok')
d. 局部使用
# 'django.middleware.csrf.CsrfViewMiddleware',
from django.views.decorators.csrf import csrf_exempt,csrf_protect
@csrf_protect
def csrf1(request):
if request.method == 'GET':
return render(request,'csrf1.html')
else:
return HttpResponse('ok')
ajax提交數(shù)據(jù)
Ajax提交數(shù)據(jù)時(shí)候,攜帶CSRF:
a. 放置在data中攜帶
<form method="POST" action="/csrf1.html">
{% csrf_token %}
<input id="user" type="text" name="user" />
<input type="submit" value="提交"/>
<a onclick="submitForm();">Ajax提交</a>
</form>
<script src="/static/jquery-1.12.4.js"></script>
<script>
function submitForm(){
var csrf = $('input[name="csrfmiddlewaretoken"]').val();
var user = $('#user').val();
$.ajax({
url: '/csrf1.html',
type: 'POST',
data: { "user":user,'csrfmiddlewaretoken': csrf},
success:function(arg){
console.log(arg);
}
})
}
</script>
b. 放在請(qǐng)求頭中
<form method="POST" action="/csrf1.html">
{% csrf_token %}
<input id="user" type="text" name="user" />
<input type="submit" value="提交"/>
<a onclick="submitForm();">Ajax提交</a>
</form>
<script src="/static/jquery-1.12.4.js"></script>
<script src="/static/jquery.cookie.js"></script>
<script>
function submitForm(){
var token = $.cookie('csrftoken');
var user = $('#user').val();
$.ajax({
url: '/csrf1.html',
type: 'POST',
headers:{'X-CSRFToken': token},
data: { "user":user},
success:function(arg){
console.log(arg);
}
})
}
</script>
補(bǔ)充知識(shí):在django的form表單及ajax提交的數(shù)據(jù)中添加認(rèn)證的csrfmiddlewaretoken
1. 對(duì)于ajax提交數(shù)據(jù),把下面的代碼加入到j(luò)s的頭部,可以保證ajax執(zhí)行時(shí)自動(dòng)提交參數(shù)csrfmiddlewaretoken。
$.ajaxSetup({data: {csrfmiddlewaretoken: '{{ csrf_token }}' }});
2. 對(duì)于form表單提交數(shù)據(jù),在表單內(nèi)部加入{% csrf_token %}標(biāo)簽,會(huì)自動(dòng)生成一個(gè)input標(biāo)簽
<form>{% csrf_token %}</form>
得到
<form><input name="csrfmiddlewaretoken" value="..." type="hidden"></form>
或者使用js添加:
$("#csrf_token").replaceWith("{% csrf_token %}");
3. 另外記錄一下使用模板過(guò)濾器處理form.field的方法
$("#{{ field.name }}").replaceWith('{{ field|linebreaksbr }}');
$(".{{ field.name }}").text('{{ field.errors|striptags }}');
{{ value|linebreaksbr }}: "Joel\nis a slug" => "Joel<br>is a slug"
{{ value|striptags }}: "<b>Joel</b> <button>is</button> a <span>slug</span>" => "Joel is a slug".
以上這篇django-csrf使用和禁用方式就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
讓文件路徑提取變得更簡(jiǎn)單的Python Path庫(kù)
這里我們介紹 Python3 自帶的庫(kù) Path,可以讓我們使用更少的代碼但是與之而來(lái)的是更高的效率,文中有非常詳細(xì)的介紹及代碼示例 ,需要的朋友可以參考下2021-05-05
Python使用嵌套循環(huán)實(shí)現(xiàn)圖像處理算法
這篇文章主要給大家詳細(xì)介紹Python如何使用嵌套循環(huán)實(shí)現(xiàn)圖像處理算法,文中有詳細(xì)的代碼示例,具有一定的參考價(jià)值,需要的朋友可以參考下2023-07-07
Python基礎(chǔ)語(yǔ)法(Python基礎(chǔ)知識(shí)點(diǎn))
這篇文章主要介紹了Python基礎(chǔ)語(yǔ)法(Python基礎(chǔ)知識(shí)點(diǎn)),需要的朋友可以參考下2016-02-02
Django 設(shè)置admin后臺(tái)表和App(應(yīng)用)為中文名的操作方法
這篇文章主要介紹了Django 設(shè)置admin后臺(tái)表和App(應(yīng)用)為中文名的操作方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
Python使用ctypes調(diào)用C/C++的方法
今天小編就為大家分享一篇關(guān)于Python使用ctypes調(diào)用C/C++的方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01
python實(shí)現(xiàn)嵌套列表平鋪的兩種方法
今天小編就為大家分享一篇python實(shí)現(xiàn)嵌套列表平鋪的兩種方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
基于Python開(kāi)發(fā)一個(gè)選擇題訓(xùn)練工具
選擇題作為一種高效的方式被廣泛應(yīng)用于各類培訓(xùn)與考試中,為了幫助學(xué)生高效學(xué)習(xí)與自測(cè),本篇文章將采用Python編寫一款基于?Python?開(kāi)發(fā)的選擇題訓(xùn)練工具,需要的可以參考下2024-12-12

