Django - jquery - Post Anfrage

Django, Flask, Bottle, WSGI, CGI…
Antworten
nvidia
User
Beiträge: 31
Registriert: Freitag 11. Februar 2011, 16:46

Hallo,
bei mir klappt die Postanfrage einfach nicht. Die Get-anfrage geht. Warum ist das so?

Code: Alles auswählen

def login(request):
    	return HttpResponse("{0}".format(request.method))

Code: Alles auswählen

urlpatterns = patterns('dubx.views',
    (r'^$', 'index'),
    (r'^login/$', 'login'),
)

Code: Alles auswählen

<script type="text/javascript">
$(function() {
	$.post("login", { 
		uname: "Der Apfel", 
		ufood: "Der Apfel" 
	    },
	    function(data) {
		alert(data);
	    }
	);
});

$(function() {
    $.get("login", function(data) {
        alert(data);
    });
});
</script>
frabron
User
Beiträge: 306
Registriert: Dienstag 31. März 2009, 14:36

Ohne wirklich Ahnung von Django zu haben: Zumindest bei Flask und Bottle muss man Post auf der Route explizit erlauben, das ist vielleicht bei Django ebenso?!
nvidia
User
Beiträge: 31
Registriert: Freitag 11. Februar 2011, 16:46

hm das nicht, aber ich les hier grat, dass man einen CRSF-Token für Postanfragen braucht hm
nvidia
User
Beiträge: 31
Registriert: Freitag 11. Februar 2011, 16:46

Also ich hab hier nochma ein überarbeitetes Beispiel, aber das mit dem Token funktioniert irgentwie nicht, was fehlt?

Code: Alles auswählen

from django.shortcuts import render_to_response
from django.template import RequestContext
from django.contrib.auth import authenticate, login
from django.utils import simplejson
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_protect

@csrf_protect
def index(request):
	if request.is_ajax():
		return HttpResponse("{0}".format(request.method))	
	if not request.user.is_authenticated():
		return render_to_response('login.html', None, context_instance = RequestContext(request))

Code: Alles auswählen

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.middleware.csrf.CsrfResponseMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
)

Code: Alles auswählen

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
	$('.login_form').submit(function(e){
		e.preventDefault();
		var username = $(".name").attr('value');
		var password = $(".pass").attr('value');
		$.ajax({
			type: "POST",
			timeout: 5000,
			data: {username: username, password: password},
			url: "login",
			success: function(result) {
				alert(result);
			}
		})
	});
});
</script>

Code: Alles auswählen

<form class="login_form" action="" method="post">
		{% csrf_token %}
		<ul class="login_wrap">
		<li><span class="legend">Login:</span></li>
...
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Du solltest die Django Docs lesen, speziell das Kapitel CSRF und Aajx
Antworten