nul*_*ull 16 python django rest post django-rest-framework
在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");
Run Code Online (Sandbox Code Playgroud)
编辑:我可以简单地使用数据读取数据response.POST["field1"],还是必须执行某些操作request.body?
编辑2:所以我可以简单地request.body用作类似字典的对象request.POST?
小智 8
据我所知,Unirest的字段方法只使用普通application/x-www-form-urlencoded数据,如HTML表单.所以你应该能够response.POST["field1"]像你建议的那样使用.
从文档:
request.data返回请求正文的解析内容。这类似于标准request.POST和request.FILES属性,除了:
- 它包括所有已解析的内容,包括文件和非文件输入。
- 它支持解析除以外的HTTP方法的内容
POST,这意味着您可以访问PUT和PATCH
请求的内容。- 它支持REST框架的灵活请求解析,而不仅仅是支持表单数据。例如,您可以使用
JSON与处理传入表单数据相同的方式来处理传入数据。
我可以简单地使用读取数据
response.POST["field1"],还是必须做些事情request.body?所以我可以简单地使用
request.body类似于字典的对象request.POST?
一个示例-从create方法(视图集)开始:
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']
)
Run Code Online (Sandbox Code Playgroud)
编辑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']
)
Run Code Online (Sandbox Code Playgroud)
如果你正在与之交互的api是一个基于Django类的sipmle视图,你可以通过以下方式访问数据request.body:
class MyView(View):
def post(self, request):
field1 = request.body.get('field1')
field2 = request.body.get('field2')
... # processing here
Run Code Online (Sandbox Code Playgroud)
如果您使用的是Django rest framework api,则可以通过request.data以下方式访问数据:
field1 = request.data.get('field1')
field2 = request.data.get('field2')
Run Code Online (Sandbox Code Playgroud)
注意:如果你发现request.DATA在互联网上的某个地方使用也是正确的,但它只对旧版本的DRF有效,并且request.data在新版本中不赞成使用它.
| 归档时间: |
|
| 查看次数: |
1453 次 |
| 最近记录: |