修改ajax中type方式並設定header,同時對put重新構建資料字典
在對views中的方法進行類物件封裝時,發現django並不支援像post和get一樣將資料封裝。
由於網頁端無法設定method方法,在用postman和ajax開啟pycharm對介面進行debug測試時發現:提交資料後並沒有進入**邏輯。
查閱資料得知,django支援put和delete方法。
為了防止跨站攻擊,django缺省會對post/put/delete這幾種操作進行csrf token檢查。post可以將其放到post的引數中,但django對put/delete只能通過檢查header的方式檢查csrf token。
所以在進行ajax傳送表單資料時,需要在ajax標頭檔案中設定csrf
測試**段如下:
lang="en">
charset="utf-8">
testtitle>
head>
action="">
使用者名稱:type="text"
name="username"
id="username">
form>
type="button"
id="btn">提交button>
id="spa">
span>
body>
html>
src="">
script>
$('#btn').click(function
() }
});$.ajax(,
datatype: 'json',
success: function
(data)
})})
script>
from django.views.generic import view
class
testview
(view):
defget
(self,request):
return render(request,'test.html')
defput(self,request):
pass
同時django對於put/delete請求並沒有像post/get那樣有乙個字典結構。我們需要手動處理request.body獲取引數:
上述辦法put設定header中的csrf驗證通過,進入**邏輯
使用django-restframework模組
pip install djangorestframework
pip install markdown # markdown support for the browsable api.
pip install django-filter # filtering support
同時在settings.py中設定
...'rest_framework',)
django-restframework方案並未測試,在測試後會反饋更新
在前端header中構造x-method欄位,在中介軟體中進行驗證,在前端使用put,delete方法時,採用post方式打包資料,但通過中介軟體進行method 資料打包轉移
util.py中設定json返回值
首先設定json返回值
return httpresponse(json.dumps())middleware設定解析方法
import json
''' 自定義method方法
'''defprocess_request
(self,request):
method = request.method
'''判斷資料型別,對資料進行封裝
'''#判斷是否為ajax提交方式
ifin request.meta['content_type']:
try:
data = json.loads(request.body.decode())
files = none
except exception as e:
return params_error()
#判斷是否為form提交方式
elif
'multipart/form-data'
in request.meta['content_type']:
data,files = multipartparser(
request,request.meta,request.meta.upload_handlers
).parse()
#否則為get提交方式
elif:
data = request.get
files = none
#判斷前端傳來的headers中是否含自定義字段
#對ajax傳入的方法進行字母格式控制
#給request物件賦於method屬性
setattr(request,'method',method)
#判斷是否有檔案上傳
if files:
setattr(request,'_files'.format(method=method),files)
#將data資料新增到method中
setattr(request,method,data)
在通過對中介軟體進行設定後,無需使用ajax在提交的request頭部放入csrf資訊,只需使用post提交方式,自定義』http_x_method』欄位為put或delete,即可實現django對put和delete的支援
個人部落格位址
使SQLServer資料支援
學習如何用的xml特徵為你的提供新的功能。如果你在it業工作,那麼你很可能聽說過xml 但如果你的工作主要與sqlserver有關,那麼你可能並沒有直接運用過xml。xml已經是web環境中的普遍的資料格式了,而且它也是中主要的底層技術之一。sqlserver以兩種方式來支援xml 通過sqlser...
使KVM autotest支援qemu 模擬
在預設的情況下 kvm autotest必須要kvm的支援。否則會報錯。現在做下面的改動,可以讓在沒有kvm支援的情況下,也可以使用kvm autotest。diff git a client virt kvm vm.py b client virt kvm vm.py index ffa55c1....
使php支援mbstring庫
mbstring庫 全稱是multi byte string 即各種語言都有自己的編碼,他們的位元組數是不一樣的,目前php內部的編碼只支援iso 8859 euc jp,utf 8 其他的編碼的語言是沒辦法在php程式上正確顯示的。解決的方法就是通過php的mbstring函式庫來解決 其安裝是在...