【发布时间】: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 是否正确?