提取JSON数据
随着REST架构的流行,前端和后端之间的数据交换越来越多地采用JSON数据格式。
例如,一个REST API可能定义为:
API | 参数 | 说明 |
---|---|---|
POST /user/ | JSON对象 | 创建一个新的用户 |
Django框架内没有内置对JSON的自动处理,不过我们可以从请求对象的body属性 获取请求中正文的原始码流,然后用json库来处理:
def v_user(req):
raw = req.body
user = json.loads(raw) #now user is a dict
repo.append(user) #save it
return HttpResponse(status=201) #201 - created
body属性是一个字符串,Django会将HTTP请求的原始数据存放在body属性中。如果 请求的Content-Type被设置为application/x-www-form-urlencoded,Django 会自动将其转化为QueryDict对象,并设置为请求对象的POST属性。但是如果请求 的Content-Type类型为其他类型,Django不会进一步处理。
等价地,也可以使用请求对象的read()方法读取HTTP请求所携带的原始数据:
raw = req.read()
修改视图v_user,当用户以GET方法请求/user/时,返回JSON格式的repo_users数据