访问请求数据对象

时间:2018-06-18 11:14:31

标签: django django-rest-framework

我将以下帖子数据发送到django Rest API

Request URL: http://localhost:8000/polls/
Request Method: POST
Status Code: 200 OK
Remote Address: 127.0.0.1:8000
Referrer Policy: no-referrer-when-downgrade
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: http://localhost:8100
Content-Length: 90
Content-Type: text/html; charset=utf-8
Date: Mon, 18 Jun 2018 11:01:54 GMT
Server: WSGIServer/0.2 CPython/3.6.5
Vary: Origin
X-Frame-Options: SAMEORIGIN
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Connection: keep-alive
Content-Length: 83
content-type: text/plain
Host: localhost:8000
Origin: http://localhost:8100
Referer: http://localhost:8100/
User-Agent: Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.170 Mobile Safari/537.36


   
0:
{id: "1", username: "admin", password: "admin", user_group_id: "1", status: "1"}

此处发送的内容将首先针对数据库中保存的内容进行身份验证。我试图访问这些数据,但没有这样做。 当我使用json parse

处理数据时

案例1。

def dunction(request)
data = json.loads(request.body.decode("utf-8"))
vak=data
return HttpResponse(vak)

然后收到以下回复

{'id': '1', 'username': 'admin', 'password': 'admin', 'user_group_id': '1', 'status': '1'}

案例2。 操作相同的代码时

data = json.loads(request.body.decode("utf-8"))
vak=data[0]
return HttpResponse(vak)

收到回复

idusernamepassworduser_group_idstatus

案例3.

def dunction(request):
  data = json.loads(request.body.decode("utf-8"))
  vak=data.username
  return HttpResponse(vak)
  

抛出错误'list' object has no attribute 'username'

FYI, 在这里,我尝试创建一个自定义身份验证功能,该功能对userData进行身份验证,然后将数据发送回服务器。

 'DEFAULT_AUTHENTICATION_CLASSES':  
    'polls.authentication.UserAuthentication',

2 个答案:

答案 0 :(得分:2)

HttpResponse需要迭代。你正在传递它实际上可迭代的各种东西:在第一种情况下,一个列表,所以它打印该列表中的(唯一)条目,这是一个字典;在第二种情况下,你传递一个字典,所以它遍历dict只给出键。在第三种情况下,出于某种原因,您尝试使用对象表示法来访问列表中的字典的键,这根本不会起作用。

我不确定您的实际问题是什么,但如果您确实想要访问用户名,则需要data[0]['username']

请注意,DRF的目的是抽象出很多这样的东西;您应该使用内置功能而不是执行任何此操作。

答案 1 :(得分:1)

使用request.data获取要处理的数据。返回消息以及HTTP状态代码,如下所示

def dunction(request):
  username=request.data['username']
  password=request.data['password']
  group_id=request.data['user_group_id']
  status=request.data['status']
  return Response({"status":"success"}, status=status.HTTP_200_OK)