【问题标题】:Django and ajax request Method Not Allowed (POST)Django 和 ajax 请求方法不允许(POST)
【发布时间】:2017-12-09 14:44:03
【问题描述】:

我在发送 ajax 帖子时收到 Method Not Allowed (POST)。它甚至没有到达第一个 request.method == 'POST' 验证。

我已经检查了我能想到的所有内容,但我仍然无法找出错误,可能是荒谬的。 已经尝试通过指向相同 url 的 'action' 属性直接提交表单,使用 'POST' 方法,我得到了同样的错误。

有什么想法/建议吗?

我的网址:

url(r'^crear_familiar/$', familiar_create, name='crear_familiar'),

我的 ajax:

var url = "{% url 'crear_familiar' %}";
$.ajax({
    type: "POST",
    url: url,
    data: $("#familiarForm").serialize(),
    success: function (data) {
        console.log(data, 'SUCCESS');
        location.reload();
    },
    error: function (data) {
        console.log('ERROR', data);
    }
});

我的看法:

def familiar_create(request):
    if request.method == 'POST':
        familiar_form = FamiliarForm(request.POST, prefix='familiar')
        if familiar_form.is_valid():
            familiar = familiar_form.save(commit=False)

            familiar.save()
            message = 'Has creado un nuevo familiar'
            if request.POST['familiar_familia']:
                familia_id = request.POST['familiar_familia']
                familia = Familia.objects.get(id=familia_id)
                tipo_familiar_id = request.POST['fhf-tipo_familiar']
                tipo_familiar = TipoFamiliar.objects.get(id=tipo_familiar_id)

                familiar_assignment = FamiliaHasFamiliar(
                    familia=familia,
                    familiar=familiar,
                    tipo_familiar=tipo_familiar
                )

                familiar_assignment.save()

                message = 'Has creado un nuevo familiar y le has asignado una familia'
            status = 200

        else:
            message = 'Ocurrió un error al crear al familiar'
            status = 500

        return JsonResponse({'status': 'false', 'message': message},
                            status=status)
    else:
        print 'GET'
        return JsonResponse(
            {'status': 'false', 'message': 'Wrong request'},
            status=500
        )

表格:

<form id="familiarForm" method="POST" action="{% url 'crear_familiar' %}">
    {% csrf_token %}
    <input name="familiar_familia" value="{{ object.pk }}" hidden>
        <div class="row">
            <div class="col-md-6">
                <div class="form-group">
                    {{ familiar_form.nombre.label }}:
                    <span class="text-danger bold">*</span>
                    {{ familiar_form.nombre|add_class:"form-control required" }}
                </div>
            </div>

            <div class="col-md-6">
                <div class="form-group">
                    {{ familiar_form.apellidos.label }}:
                    <span class="text-danger bold">*</span>
                    {{ familiar_form.apellidos|add_class:"form-control required" }}
                </div>
            </div>
        </div>
    </form>
    <div class="text-right">
        <button id="saveFamiliar" type="submit" class="btn btn-primary" familiar_pk="0">
            Submit <i class="icon-arrow-right14 position-right"></i>
        </button>
    </div>

【问题讨论】:

  • 您是否传递了csrf 令牌?
  • 是的,我在表单中有 django {% csrf_token %}
  • 标志指向 url 配置被关闭。检查使用的帖子网址(您可以检查浏览器开发控制台中的网络选项卡)是否与您需要的内容相匹配,并尝试直接访问该网址以确保没有其他网址覆盖它。
  • 好的。刚刚检查,直接访问和网络信息都指向我需要的 url。还检查了是否有任何重复,但没有发现任何问题。
  • 发送 Ajax 的 URL 是否正确?

标签: jquery ajax django


【解决方案1】:

终于找到错误了: 就在不工作的网址之前,我有另一个带有正则表达式的网址:

url(r'^(?P<pk>[-\w]+)/$', FamiliaDetailView.as_view(),
        name='detalle_familia')

当我发送我真正需要的那个但我认为我发送了错误的论点/方法时,这个看起来好像出了问题。我认为它实际上是在使用我需要的那个,因为请求包含 url 的“正确”文本。

解决方法是修改它,使正则表达式与它之后的任何其他表达式都不匹配:

url(r'^detalle/(?P<pk>[-\w]+)/$', FamiliaDetailView.as_view(),
        name='detalle_familia')

【讨论】:

    猜你喜欢
    • 2017-03-15
    • 2020-11-02
    • 1970-01-01
    • 2018-08-19
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    相关资源
    最近更新 更多