【发布时间】:2018-02-07 00:24:50
【问题描述】:
我正在尝试将一些值从前端发送到 Django 应用程序。我想操纵这些值,然后重定向到另一个视图,但似乎 Django 没有重定向,也没有呈现任何内容。
这是我的 urls.py
from django.conf.urls import url
from . import settings
from personality_form import views
urlpatterns = [
url(r'^$', views.home, name="home"),
url(r'^apiLogin/(?P<_id>\d+)$', views.apiLogin,name="apiLogin"),
url(r'^formulario/(?P<_id>\d+)$', views.formulario, name="formulario"),
]
这是我的观点.py
from django.shortcuts import render, redirect
from personality_form.models import *
from personality_form.forms import *
from django.views.decorators.csrf import csrf_exempt
def home(request):
return render(request, 'index.html')
def formulario(request, _id):
if (request.method == 'POST'):
form = personalityForm(request.POST)
else:
form = personalityForm()
return render(request, 'formulario.html', {'form': form})
@csrf_exempt
def apiLogin(request, _id):
if (request.method == 'POST'):
return redirect('/formulario/'+_id)
这是我用来从前面发送 POST 请求的 javascript 函数。
function test() {
var http = new XMLHttpRequest();
http.open('POST', '/apiLogin/1234', true);
http.setRequestHeader('Content-type', 'application/json');
var payload = {userID: "1234", access: "4567"};
var params = JSON.stringify(payload);
// Send request
http.send(params);
}
我尝试将 POST 发送到 apiLogin 视图。我检查它是否正在进入该视图,但是当我尝试重定向到公式视图时,它进入公式代码但似乎没有执行渲染指令。我尝试更改渲染的重定向功能,但也不显示新的 html。
不重定向url和换前面有什么原因吗?
我正在使用 Django 1.11 和 Python 3.6。
【问题讨论】:
-
您是否看到任何错误或堆栈跟踪?
-
没有。 POST返回“POST /apiLogin/1234 HTTP/1.1”302,然后从“formulario”视图执行代码,但它似乎忽略了渲染指令,并且不更改url。
-
我明白了,你是用javascript函数测试代码吗??它正确地重定向到 URL,但是 javascript 没有对该重定向指令做任何事情。
-
您正在从 javascript 发出 HTTP 请求,因此您的 AJAX 调用会收到响应。由于您只是在做
http.send(params),甚至没有查看响应,因此似乎什么都没有发生。但是,如果您查看您的 javascript 控制台,您会看到响应 HTTP 302 重定向。 -
是的,我正在使用测试 javascript 函数将客户端与服务器通信。我应该怎么做才能管理来自 javascript 的响应?我看着它就像从 HTML 发送一个表单,当 django 应用程序收到它时,你可以更改视图或渲染文件。这个愿景错了吗?
标签: javascript python django redirect