【问题标题】:Django & POST from Ajax来自 Ajax 的 Django 和 POST
【发布时间】:2023-04-08 23:14:02
【问题描述】:

我一直在尝试向我的 Django 视图发送 POST,最终目标是发送“选定”输入(来自单击的#id)并让 Django 发送我可以动态显示的响应。使用 GET 我能够收到响应,但 POST 给我带来了问题(我可以选择 GET,但此时我只想了解为什么我会搞砸 POST……;))

到目前为止,我已经使用了几本指南,但大多数都是关于表单的,老实说,我在阅读文档时遇到了麻烦(我几乎没有编程背景)。

有人能指出我正确的方向吗?

我的 HTML('numberinput' 现在是占位符):

<script>
    $("#test").on(click(function () {
        numberinput = 8;

        $.ajax({
            type: 'POST',
            url: '{% url "rungenerator" %}',
            data: {'numberinput': numberinput},
            dataType: 'json',
            success: function (inputtype) {
                alert(inputtype)

            }

        })
    }))

</script>

<div>
    <form method="POST">
        {% csrf_token %}
        <button type="submit" id="test">Buzzzz Ping</button>

    </form>
</div>

观看次数:

def rungenerator(request):
    inputtype = "Please make a selection"

    if request.method == 'POST':
        inputtype = request.POST['numberinput',None]
    return JsonResponse(inputtype)

网址:

url(r'^ajax/rungenerator/$', views.rungenerator, name='rungenerator'),

【问题讨论】:

  • 什么是错误,你能检查一下响应是什么吗?还要检查这个Ajax 示例。
  • 浏览器控制台给了我一个“POST IP#/generator 405(不允许的方法)”(我之前访问过该链接并将再次访问,谢谢)
  • 当您只使用相对 url 而不是模板标签时会发生什么?而不是 {% url "rungenerator" %} 只需将 '/ajax/rungenerator/' 作为 url; 405 可能具有欺骗性,通常是由错误的 URL 引起的
  • 这也会提示 405。我猜 URLS 不会包含我的问题,因为 GET 确实有效。

标签: ajax django post


【解决方案1】:

@csrf_exempt 将允许您绕过令牌验证。请检查您的 Ajax 调用是否导致跨域错误。如果是这种情况,您应该在您的 django 应用程序上使用 cors-headers。顺便说一句,使用 require_http_methods 将强制该函数检查 HTTP 方法,因此您可以 100% 确定您将获得的所有数据都是 POST

from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods
from django.http import HttpResponse

@csrf_exempt
@require_http_methods(["POST"])
def rungenerator(request):
    inputtype = request.POST.get('numberinput', None)
    payload = {"response":str(inputtype)} if inputtype is not None else {"response":"please type something"}
    return HttpResponse(json.dumps(payload, indent=2),
                            content_type='application/json',
                            status=200) 

【讨论】:

  • 遗憾的是仍然是 405 响应。
  • 你检查了你的标题响应......它说了什么? 405 Method Not Allowed 这意味着您可以说发送 GET 并且您只能在我使用 POST 的代码示例中发送 POST,因此您需要发送 POST 值。我测试了代码并且工作正常。请检查您的标题响应。
  • 它以来自 rungenerator/ 的 403 开始​​(请求方法:发布,状态代码:red 403 Forbidden。然后是来自 generator/ 的 405(方法不是允许)。
猜你喜欢
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-20
  • 1970-01-01
  • 2016-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多