dojo/request PUT 方法不起作用
dojo/request PUT method dosn't work
我有一个使用 Python Django 和 Dojo 框架的网络应用程序。
我想从 Dojo(使用 dojo/request)向服务器 Django 发送 PUT 请求,但是当服务器收到请求时,其中的数据为空并且验证无效。
但是当我将方法从 PUT 更改为 POST 时,它工作正常。
这是我的代码:
_save: function(data){
var idForm = "editForm" + this.id;
var value = dijit.byId(idForm).get('value');
console.log(value);
request.put("/api/guestbook/"+this.bookName+"/greeting/"+this.id+"/", {
data: {
book_name: this.bookName,
message: value.message
},
headers: { "X-CSRFToken": _cookie('csrftoken') }
}).then(lang.hitch(this, function(text){
}));
},
在 Django 中:
def put(self, request, *args, **kwargs):
form = self.get_form(self.form_class)
logging.warning(form)
logging.warning(request.PUT)
if form.is_valid():
logging.warning("This form is VALID")
else:
logging.warning("This form is INVALID!!!")
谁能帮帮我?
感谢您的帮助!
我从您的 X-CSRFToken header 猜测您正在执行跨域请求,即 CORS.
如果您查看浏览器的控制台,您可能会看到一个 OPTIONS 请求被发送到服务器。这称为 "preflight request",您的服务器需要响应 CORS headers 告诉浏览器可以发出跨域 PUT 请求。
在您的情况下,您希望服务器响应 headers 类似于:
Access-Control-Allow-Origin: http://your-site-hostname-and-port
Access-Control-Allow-Methods: GET, POST, PUT
Access-Control-Allow-Headers: X-CSRFToken
简单 POST 请求不需要预检 OPTIONS 请求,这可能就是它起作用的原因。一个关于 html5rocks 的非常好的教程 here.
我在下面找到了接收 PUT 方法的方法:
def put(self, request, *args, **kwargs):
request.PUT = QueryDict(request.body)
form = self.form_class(request.PUT)
if form.is_valid():
logging.warning("This form is VALID")
else:
logging.warning("This form is INVALID")
没关系:)
谢谢大家!
我有一个使用 Python Django 和 Dojo 框架的网络应用程序。 我想从 Dojo(使用 dojo/request)向服务器 Django 发送 PUT 请求,但是当服务器收到请求时,其中的数据为空并且验证无效。 但是当我将方法从 PUT 更改为 POST 时,它工作正常。
这是我的代码:
_save: function(data){
var idForm = "editForm" + this.id;
var value = dijit.byId(idForm).get('value');
console.log(value);
request.put("/api/guestbook/"+this.bookName+"/greeting/"+this.id+"/", {
data: {
book_name: this.bookName,
message: value.message
},
headers: { "X-CSRFToken": _cookie('csrftoken') }
}).then(lang.hitch(this, function(text){
}));
},
在 Django 中:
def put(self, request, *args, **kwargs):
form = self.get_form(self.form_class)
logging.warning(form)
logging.warning(request.PUT)
if form.is_valid():
logging.warning("This form is VALID")
else:
logging.warning("This form is INVALID!!!")
谁能帮帮我? 感谢您的帮助!
我从您的 X-CSRFToken header 猜测您正在执行跨域请求,即 CORS.
如果您查看浏览器的控制台,您可能会看到一个 OPTIONS 请求被发送到服务器。这称为 "preflight request",您的服务器需要响应 CORS headers 告诉浏览器可以发出跨域 PUT 请求。
在您的情况下,您希望服务器响应 headers 类似于:
Access-Control-Allow-Origin: http://your-site-hostname-and-port
Access-Control-Allow-Methods: GET, POST, PUT
Access-Control-Allow-Headers: X-CSRFToken
简单 POST 请求不需要预检 OPTIONS 请求,这可能就是它起作用的原因。一个关于 html5rocks 的非常好的教程 here.
我在下面找到了接收 PUT 方法的方法:
def put(self, request, *args, **kwargs):
request.PUT = QueryDict(request.body)
form = self.form_class(request.PUT)
if form.is_valid():
logging.warning("This form is VALID")
else:
logging.warning("This form is INVALID")
没关系:)
谢谢大家!