Django: 路由与视图 互动版

提取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数据