django - Django在ajax请求后重定向
问题描述
我想做一个学校网站,你必须输入你的邀请码才能注册。我想使用 ajax POST 请求验证此代码,但是当我尝试发出验证视图的请求时,它会使用JSON代码重定向到页面。
我的阿贾克斯:
{%extends "base.html"%}
{%block content%}
<script>
$('#code_form').on('submit', function(evt){
evt.preventDefault();
let form = evt.target
$.ajax({
url: form.action,
type: "POST",
data: {'code': $('input[name="code"]')},
headers: {'X-CSRFToken': "{{csrf_token}}"},
success: function(data){
window.location.href = data.url;
let status = JSON.parse(data)['ok']
if(status){
console.log('Good code');//This not executing
}else{
console.log('Bad code');//this too
}
}
})
});
</script>
<form method = "POST" id = "code_form" action="{%url 'reg:submit'%}">
{%csrf_token%}
Enter your invite code: {{form.code}}<br>
<button id = "submit">Continue</button>
</form>
{%endblock%}
视图.py:
from .forms import StartF #form for code (contains only one field)
from django.http import JsonResponse
from django.core.exceptions import ObjectDoesNotExist
#here must be one more view, but it works fine
def submit(request):
code = request.POST.get('code')
data = {}
try:
user = Unregistered.objects.all().get(pk = code)
except ObjectDoesNotExist:
data['ok'] = False
else:
data['ok'] = True
return JsonResponse(data)
我的 urls.py:
from django.urls import path
from . import views
from django.conf.urls import url
app_name = 'reg'
urlpatterns = [
url(r'^$', views.start, name='start'), #that one view
url(r'^ajax/submit/$', views.submit, name='submit'),#this view works not fine.
]
解决方案
确保将 jquery.js 包含到 html 文件中
把你的代码放在你使用 ajax 的地方
$( document ).ready
$( document ).ready(function() { ... $('#code_form').on('submit', function(evt){ ... } ... }
推荐阅读
- python - 使用 Python C 类型在 kernel32 上调用 GetPrivateProfileString
- java - 如何在 JSON 响应中的 2 个对象之间添加换行符?以及如何从 json 文件中删除 [ ] 方括号?
- python - 将列表与两个元组进行比较
- jenkins - 用于从 nexus 下载工件并使用 gradle 脚本将其放置在文件夹中的 Jenkins 脚本
- kubernetes - Calico 节点状态返回 Calico 进程未运行
- python - 将要选择/取消选择的列值定义为默认值
- python - 为什么垂直线坐标不同?
- python-3.x - 运行 AWS Lambda 函数以跨账户整理证书
- c# - 尝试在智能卡上生成密钥时出错
- reactjs - 反应和表格