【发布时间】:2016-05-25 07:13:15
【问题描述】:
我正在使用 Django 并有一个视图来获取/插入数据库中的一些记录。这是我的代码:
class JSONResponse(HttpResponse):
"""
An HttpResponse that renders its content into JSON.
"""
def __init__(self, data, **kwargs):
content = JSONRenderer().render(data)
kwargs['content_type'] = 'application/json'
super(JSONResponse, self).__init__(content, **kwargs)
@api_view(('GET','POST'))
@renderer_classes((TemplateHTMLRenderer,))
@csrf_exempt
def cours_list(request):
if request.method == 'GET':
data = JSONParser().parse(request)
results = Lesson.objects.get(discipline=data.discipline)
return Response({'cours': results}, template_name='search_results.html')
elif request.method == 'POST':
data = JSONParser().parse(request)
serializer = LessonSerializer(data=data)
if serializer.is_valid():
serializer.save()
return JSONResponse(serializer.data, status=201)
return JSONResponse(serializer.errors, status=400)
因此,我使用 GET 获取数据并使用 POST 插入新记录。首先,这是正确的做法吗?我读过一次,无论在什么情况下使用 GET 都不是一个坏主意。 此外,GET 代码实际上并没有工作(我收到一个错误的请求错误),这似乎来自无法解析请求的 JSONParser。
编辑1
这是发送的请求:
GET http://127.0.0.1:8000/cours/?{%22discipline%22:%22Mathematiques%22,%22localisation%22:%22%22}
编辑2
我尝试打印requet.GET,它给出的结果如下:
<QueryDict: {'{"discipline":"Mathematiques","localisation":""}': ['']}>
当尝试访问request.data['discipline'] 时,它会说:
django.utils.datastructures.MultiValueDictKeyError: "'discipline'"
【问题讨论】:
-
我想建议你发布你的整个视图,因为不清楚你是否正在尝试使用常规的 Django 视图函数,或者如果你想使用 Django REST Framework 的 JSONParser 等如果你可以发布一个
curl用于发送请求的命令(它可以帮助其他人重现您的问题,以便他们为您提供帮助) -
@Bakkel。我确实在尝试使用 Django REST。