gpt4 book ai didi

python - 我应该使用 GET 还是 POST 来检索结果 Django

转载 作者:行者123 更新时间:2023-12-01 04:07:25 27 4
gpt4 key购买 nike

我正在使用 Django,并且有一个 View 来获取/插入数据库中的一些记录。这是我的代码:

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,%22localization%22:%22%22}

编辑2

我尝试打印 requet.GET,它给出的结果是:

<QueryDict: {'{"discipline":"Mathematiques","localisation":""}': ['']}>

当尝试访问request.data['discipline']时,它会显示:

django.utils.datastructs.MultiValueDictKeyError:“'纪律'”

最佳答案

Should I use GET or POST to retrieve results Django

要检索,请使用 GET

I read once that it't a bad idea to use GET whatever the situation

完全不会,只要您的 GET 操作不包含副作用(例如,在您的 GET 方法中,您仅从数据库中读取数据。

The GET code is not actually working (I'm getting a bad request error)

  data2 = JSONParser().parse(request) # you used data2
results = Lesson.objects.get(discipline=data.discipline) # and you used data
^
|____ data? data2?

您没有正确传递 GET 参数

您需要像这样传递 GET 参数 url/?param1=value1要读取该值,请使用 param1 = request.GET['param1'] ,param1 将是字符串 value1

您所做的不是传递值:

GET http://127.0.0.1:8000/cours/?{%22discipline%22:%22Mathematiques%22,%22localization%22:%22%22}

这就是为什么你得到一个空值['']

<QueryDict: {'{"discipline":"Mathematiques","localisation":""}': ['']}>

如果需要,您可以将整个数据作为 JSON 字符串传递,但我更喜欢像这样分解它:

url/?discipline=Mathematiques&localization=Quelquechose

discipline = request.GET['discipline']
localisation = request.GET['localisation']

关于python - 我应该使用 GET 还是 POST 来检索结果 Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35391370/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com