简体   繁体   中英

django recognizing “post” as “get”

All my "post" actions are being recognized as "get" I have tried everything I know to fix this but everything seems to be in order. Submitting the form returns "GET" every time.

urls.py

from django.conf.urls.defaults import *
urlpatterns = patterns('',
 url(r'^buildit/$', 'main.apps.builder.views.main'),
)

views.py

from django.http import HttpResponse

def main(request):
  return HttpResponse(request.method)

html form

<form id="myform">
<input type="checkbox" name="list" value="audio"/> Audio<br />
<input type="checkbox" name="list" value="video"/> Video<br />
<input type="submit" value="Get Custom Library!" /> 
</form>

jquery

$(document).ready(function() {

$("#myform").submit(function() {



    serialize = $(this).serialize()

    $.ajax({
    type: 'POST',
    url: '/django/builder/buildit',
    data: serialize,
    crossDomain: false,
    success: function(response){
        alert(response);
    }
});

    return false;

    $(document).ajaxSend(function(event, xhr, settings) {
function getCookie(name) {
    var cookieValue = null;
    if (document.cookie && document.cookie != '') {
        var cookies = document.cookie.split(';');
        for (var i = 0; i < cookies.length; i++) {
            var cookie = jQuery.trim(cookies[i]);
            // Does this cookie string begin with the name we want?
            if (cookie.substring(0, name.length + 1) == (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
}
function sameOrigin(url) {
    // url could be relative or scheme relative or absolute
    var host = document.location.host; // host + port
    var protocol = document.location.protocol;
    var sr_origin = '//' + host;
    var origin = protocol + sr_origin;
    // Allow absolute or scheme relative URLs to same origin
    return (url == origin || url.slice(0, origin.length + 1) == origin + '/') ||
        (url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') ||
        // or any other URL that isn't scheme relative or absolute i.e relative.
        !(/^(\/\/|http:|https:).*/.test(url));
}
function safeMethod(method) {
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}

if (!safeMethod(settings.type) && sameOrigin(settings.url)) {
    xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
}
});

});
});

might as well put it in your form

<form id="myform" method="post">

It's hard to read the javascript that is strangely indented. But, why is there code after return false; without closing the submit callback?

Now I'm no expert on Django here...but it seems like Django will override any requests if there is an Append_Slash issue. It will redirect the request with the slash appended at the end, at this point, it will lose any POST information and will return the GET method. Maybe try putting a / at the end of /django/builder/buildit? Shot in the dark... (Would seem this only matters if APPEND_SLASH = false...)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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