【发布时间】:2016-05-21 03:15:25
【问题描述】:
关于这个主题有很多信息,但我仍然不清楚在 django 中发送和接收 json 数据的正确方法是什么。是否使用原始格式。
方法1:不使用原始格式:
#client
$.ajax({
type: "POST",
url: "api",
contentType: "application/json; charset=utf-8",
data: {
csrfmiddlewaretoken: '{{ csrf_token }}',
x: $("#x").val(),
},
success: response,
dataType: 'json',
minLength: 0,
});
# server - views.py:
@api_view(['GET', 'POST'])
@authentication_classes((TokenAuthentication, SessionAuthentication))
@permission_classes((IsAuthenticated,))
@staff_member_required
def api(request):
params = request.POST
方法2:使用原始格式:
# client
$.ajax({
type: "POST",
url: "api",
contentType: "application/json; charset=utf-8",
headers: {'X-CSRFToken': '{{ csrf_token }}'},
data: JSON.stringify({
x: $("#x").val(),
}),
success: response,
dataType: 'json',
minLength: 0,
});
# server - views.py:
@api_view(['GET', 'POST'])
@authentication_classes((TokenAuthentication, SessionAuthentication))
@permission_classes((IsAuthenticated,))
@staff_member_required
def api(request):
params = json.loads(request.data)
我认为使用原始格式时,您可以传入列表,但如果没有原始格式,它无法理解数据中的列表。 另一方面,方法 2 需要 JSON.stringify 和 json.dumps。 另外,我不知道为什么方法2会抛出您无法访问正文的异常... 我想知道的是:
- 我采用哪种方法重要吗?
- 如果是,哪种方法合适?为什么?
- 如果最好使用原始 json,那么它为什么会抱怨 ajax 请求下方(见下方错误)?
【问题讨论】: