【发布时间】:2014-02-22 16:47:52
【问题描述】:
我试图在 Django 的视图中接收 JSON 作为 REST 服务。我知道有相当成熟的 REST 库(例如 Django REST Framework)。但我需要使用 Python/Django 的默认库。
【问题讨论】:
-
两者,POST 和 GET
我试图在 Django 的视图中接收 JSON 作为 REST 服务。我知道有相当成熟的 REST 库(例如 Django REST Framework)。但我需要使用 Python/Django 的默认库。
【问题讨论】:
request.POST是django预处理的,所以你想要的是request.body。使用 JSON 解析器对其进行解析。
import json
def do_stuff(request):
if request.method == 'POST':
json_data = json.loads(request.body)
# do your thing
【讨论】:
TypeError: the JSON object must be str, not 'bytes'
json.loads(request.body.decode("utf-8"));请参阅stackoverflow.com/questions/29514077/… 了解更多详情。
使用HttpResponse 将响应发送到浏览器而不刷新页面。
views.py
from django.shortcuts import render, HttpResponse,
import simplejson as json
def json_rest(request):
if request.method == "POST":
return HttpResponse(json.dumps({'success':True, 'error': 'You need to login First'}))
else:
return render(request,'index.html')
urls.py
(r^'/','app.views.json_rest')
客户端:
$.ajax({
type:"post",
url: "/",
dataType: 'json',
success: function(result) {
console.log(result)
}
});
【讨论】:
@json def feed_one(request, id): sample = get_object_or_404(Sample, pk=id) return sample
def json(fn): def wrapper(request, *args, **kwargs): try: fn_result = fn(request, *args, **kwargs) json_result = {'is_successful': True, 'message': None, 'data': fn_result} except Exception as e: if DEBUG: raise e json_result = {'is_successful': False, 'message': e.message, 'data': None} return HttpResponse(to_json(json_result), mimetype='application/json') return wrapper 现在我正在编写响应 hadnling 机制,需要类似于上面显示的代码。