使django支援PUT,DELETE的方案

2021-08-20 22:00:42 字數 3567 閱讀 4959

修改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函式庫來解決 其安裝是在...