gpt4 book ai didi

django - 如何将 Django HttpResponse 转换为 Django 渲染调用

转载 作者:行者123 更新时间:2023-12-01 23:51:19 27 4
gpt4 key购买 nike

我有以下代码

def ajax_login_request(request):
try:
request.POST[u'login']
dictionary = request.POST
except:
dictionary = request.GET
user = authenticate(username = dictionary[u'login'], password = dictionary[u'password'])
if user and user.is_active:
login(request, user)
result = True
else:
result = False
response = HttpResponse(json.dumps(result), mimetype = u'application/json')
return response

这是通过ajax调用的。我是菜鸟,这是书中的一个例子。不幸的是,我使用的 Django 版本会引发 CSRF 错误。我已经完成了其他 CSRF 位,但我不知道如何将 HttpResponse 位更改为渲染调用。我不想使用 CSRF_exempt,因为我不知道什么时候合适。有人可以为我提供上述 HttpResponse 的等效渲染调用吗?

谢谢

最佳答案

为了使您的原始代码正常工作,您需要获取一个 RequestContext 对象并将其与您的响应一起传递,如下所示:

from django.http import HttpResponse
from django.template import RequestContext, Template

def ajax_login_request(request):
# ...

# This bit of code adds the CSRF bits to your request.
c = RequestContext(request,{'result':json.dumps(result)})
t = Template("{{result}}") # A dummy template
response = HttpResponse(t.render(c), mimetype = u'application/json')
return response

请仔细阅读 CSRF documentation因为如果您不了解 CSRF 在应用程序中“连接”的所有方式,您可能会遇到奇怪的错误。该页面还有一个 javascript 代码片段,以确保在您没有表单的情况下发送 CSRF cookie 时与您的 ajax 请求一起发送。

您还可以使用render_to_response()快捷方式,但您需要加载一个实际的模板(在您的情况下,您不需要模板,因此在我的示例中使用“虚拟”模板)。

关于django - 如何将 Django HttpResponse 转换为 Django 渲染调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8327204/

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