简体   繁体   English

Django-使用ExtJS发布Ajax请求禁止403

[英]Django - Post ajax request forbidden 403 with ExtJS

I am using ExtJs to create a button that do an ajax post to my django application, but the post is blocked by a FORBIDDEN (403) error. 我正在使用ExtJs创建一个对我的django应用程序执行ajax发布的按钮,但是该发布被FORBIDDEN(403)错误阻止。

I tryed to pass the CSRF token in as POST data by setting a custom X-CSRFToken header to the value of the CSRF token ( https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/#ajax ) without success 我试图通过将自定义X-CSRFToken标头设置为CSRF令牌的值( https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/#ajax ),将CSRF令牌作为POST数据传递。没有成功

ExtJS.js ExtJS.js

        action =  new Ext.Button({
            text: 'Ajax Test',
            handler: function () {
                Ext.Ajax.request({
                        url: 'test/',
                        method: 'POST',
                        headers: { 'Content-Type': 'application/json'},
                        params: {'test': 'test'},
                        success: function(response, opts) {
                                var obj = Ext.decode(response.responseText);
                                console.dir(obj);
                                },
                        failure: function(response, opts) {
                                console.log('server-side failure');
                                }
                });
            },
         });

view.py view.py

def test(request):
    print "TEST WORKING"
    print dict(request.POST.copy().iteritems())
    return HttpResponse("")

CHROME NETWORK TAB: 铬网络标签:

Response: 响应:

CSRF verification failed. Request aborted.

Cookies: 饼干:

Request Cookies:
csrftoken  :  S7uLgmhqeprWqL4NdH9mznIfpTgyM9RP
djdt  :  hide
djdttop  :  30
sessionid  :  sx4ukmkitqp39wvuve1a9zed2kjiwfb1

Response Cookies:
(empty)

Headers: 头:

Request URL:http://127.0.0.1:8000/basqui/layer/edit/2/test/
Request Method:POST
Status Code:403 FORBIDDEN
Request Headersview source
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Connection:keep-alive
Content-Length:9
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Cookie:sessionid=sx4ukmkitqp39wvuve1a9zed2kjiwfb1; csrftoken=S7uLgmhqeprWqL4NdH9mznIfpTgyM9RP; djdttop=30; djdt=hide
Host:127.0.0.1:8000
Origin:http://127.0.0.1:8000
Referer:http://127.0.0.1:8000/basqui/layer/edit/2
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36
X-Requested-With:XMLHttpRequest
Form Dataview sourceview URL encoded
test:test
Response Headersview source
Content-Type:text/html
Date:Tue, 07 Jan 2014 16:52:15 GMT
Server:WSGIServer/0.1 Python/2.7.5
X-Frame-Options:SAMEORIGIN
        action =  new Ext.Button({
        text: 'Ajax Test',
        handler: function () {
            var csrf = Ext.util.Cookies.get('csrftoken');
            Ext.Ajax.request({
                    url: 'test/',
                    method: 'POST',
                    headers: { 'Content-Type': 'application/json'},
                    params: {'test': 'test', 'csrfmiddlewaretoken': csrf},
                    success: function(response, opts) {
                            var obj = Ext.decode(response.responseText);
                            console.dir(obj);
                            },
                    failure: function(response, opts) {
                            console.log('server-side failure');
                            }
            });
        },
     });

https://www.sencha.com/forum/showthread.php?134125-Django-1-3-Login-with-ExtJS-4-and-CSRF https://www.sencha.com/forum/showthread.php?134125-Django-1-3-Login-with-ExtJS-4-and-CSRF

I put this in my Application launch function: 我把它放在我的应用程序启动函数中:

Ext.require(["Ext.util.Cookies", "Ext.Ajax"], function(){
    // Add csrf token to every ajax request
    var token = Ext.util.Cookies.get('csrftoken');
    if(!token){
        Ext.Error.raise("Missing csrftoken cookie");
    } else {
        Ext.Ajax.defaultHeaders = Ext.apply(Ext.Ajax.defaultHeaders || {}, {
            'X-CSRFToken': token
        });
    }
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM