[英]Acessing POST field data without a form (REST api) using Django
在django文檔中 ,它說:
HttpRequest.POST
類似字典的對象,包含所有給定的HTTP POST參數,前提是請求包含表單數據。 請參閱下面的QueryDict文檔。 如果您需要訪問請求中發布的原始或非表單數據,請通過HttpRequest.body屬性訪問它。
但是,服務器不響應瀏覽器(例如使用JS框架或表單),而是響應Anroid / iOS應用程序發送的REST API。
如果客戶端直接在POST請求中發送字段,我該如何讀取數據? 例如,這個(Java + Unirest):
Unirest.post("/path/to/server")
.field("field1", "value2")
.field("field2", "value2");
編輯:我可以使用response.POST["field1"]
簡單地讀取數據,還是我必須對request.body
做一些事情?
編輯2:所以我可以簡單地使用request.body
作為類似於字典的對象,類似於request.POST
?
據我所知,Unirest的字段方法只使用普通的application/x-www-form-urlencoded
數據,如HTML表單。 所以你應該能夠像你建議的那樣使用response.POST["field1"]
。
來自文檔 :
request.data
返回請求正文的已解析內容。 這類似於標准的request.POST
和request.FILES
屬性,除了:
- 它包括所有已解析的內容,包括文件和非文件輸入。
- 它支持解析除
POST
之外的HTTP方法的內容,這意味着您可以訪問PUT
和PATCH
的內容
要求。- 它支持REST框架的靈活請求解析,而不僅僅支持表單數據。 例如,您可以像處理傳入表單數據一樣處理傳入的
JSON
數據。
我可以使用
response.POST["field1"]
簡單地讀取數據,還是我必須對request.body
做一些事情?所以我可以簡單地使用
request.body
作為類似於字典的對象,類似於request.POST
?
示例 - 來自create
方法(viewsets):
user = dict(
full_name=request.DATA['full_name'],
password=request.DATA['password'],
email=request.DATA['email'],
personal_number=request.DATA['personal_number'],
user_type=request.DATA['user_type'],
profile_id=request.DATA['profile_id'],
account_id=request.DATA['account_id']
)
編輯1 : 在版本3(最新)中 - request.DATA
已替換為request.data
:
user = dict(
full_name=request.data['full_name'],
password=request.data['password'],
email=request.data['email'],
personal_number=request.data['personal_number'],
user_type=request.data['user_type'],
profile_id=request.data['profile_id'],
account_id=request.data['account_id']
)
如果您正在與之交互的api是一個基於Django類的sipmle視圖,則可以通過request.body
訪問數據,如下所示:
class MyView(View):
def post(self, request):
field1 = request.body.get('field1')
field2 = request.body.get('field2')
... # processing here
如果您使用的是Django rest framework api,則可以通過request.data
訪問數據:
field1 = request.data.get('field1')
field2 = request.data.get('field2')
注意:如果你發現在互聯網上某處使用的request.DATA
也是正確的,但它只適用於舊版本的DRF,並且在新版本中不推薦使用request.data
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.