2011-06-29 4 views
0

Je travaille actuellement sur un projet où nous utilisions précédemment Django. Cependant, cela s'est avéré un peu lourd pour nos besoins, donc nous passons le projet à utiliser cherrypy car nous avons seulement besoin de traiter les demandes.

mon problème est le suivant. J'ai un formulaire sur la page html (index.html) lorsque l'utilisateur clique sur soumettre la fonction jQuery suivante est exécutée.

$(document).ready(function() { 
    $("#loginform").submit(function() { 
     var request_data = {username:$("#username").val(),password:"test"}; 
     $.post('/request',request_data, function(data) { 
             $("#error").html(data['response']); 
     }); 
     return false; 
    }); 
}); 

Cela fonctionne très bien. La méthode Cherrypy suivante devrait ramasser les données de la requête mais elle ne semble pas être exécutée. Voici la méthode Cherrypy pour la requête.

@cherrypy.expose 
def request(self, request_data): 
    print "Debug" 
    cherrypy.response.headers['Content-Type'] = 'application/json' 
    return simplejson.dumps(dict(response ="Invalid username and/or password")) 

Ceci est seulement une méthode d'essai et j'attendre à voir « Debug » arriver dans la fenêtre de terminal et le message d'erreur affiché sur la page Web après que le bouton est utilisé

dans le terminal I obtenir ce message après que la demande est faite:

"POST /request HTTP/1.1" 404 1254 "http://127.0.0.1:8080/" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-us) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1" 

Cela indiquerait qu'il ne peut pas trouver la méthode de demande. Tout ce que je peux penser c'est que c'est quelque chose à voir avec le paramètre.

Comme je suis nouveau à cherrypy je m'attends à quelque chose de simple que je manque des pointeurs serait génial. PS: Les travaux suivants, mais je dois être en mesure de transmettre plusieurs données à Cherrypy. (Le paramètre cherrypy est modifié pour nom d'utilisateur pour permettre que cela fonctionne)

$(document).ready(function() { 
    $("#loginform").submit(function() { 
     $.post('/request',{username:$("#username").val()}, function(data) { 
             $("#error").html(data['response']); 
     }); 
     return false; 
    }); 
}); 

Merci à l'avance pour toute aide ou des conseils dans ce numéro.

Voici mon fichier cherrypy complet.

import cherrypy 
import webbrowser 
import os 
import simplejson 
import sys 
from backendSystem.database.authentication import SiteAuth 

MEDIA_DIR = os.path.join(os.path.abspath("."), u"media") 

class LoginPage(object): 
@cherrypy.expose 
def index(self): 
    return open(os.path.join(MEDIA_DIR, u'index.html')) 

@cherrypy.expose 
def request(self, request_data): 
    print "Debug" 
    cherrypy.response.headers['Content-Type'] = 'application/json' 
    return simplejson.dumps(dict(response ="Invalid username and/or password")) 


config = {'/media': {'tools.staticdir.on': True, 'tools.staticdir.dir': MEDIA_DIR, }} 

root = LoginPage() 

# DEVELOPMENT ONLY: Forces the browser to startup, easier for development 
def open_page(): 
webbrowser.open("http://127.0.0.1:8080/") 
cherrypy.engine.subscribe('start', open_page) 

cherrypy.tree.mount(root, '/', config = config) 
cherrypy.engine.start() 
+0

vous devriez poster une solution comme une réponse ci-dessous –

+0

compris, fera – Lipwig

Répondre

6

J'ai découvert la solution à cela. JQuery:

$(document).ready(function() { 
$("#loginform").submit(function() { 
    $.post('/request',{username:$("#username").val(),password:"test"}, function(data) { 
            $("#error").html(data['response']); 
    }); 
    return false; 
}); 

}); ensuite dans la méthode cherrypy Je fais ceci:

def request(self, **data): 
    # Then to access the data do the following 
    print data['<keyValue'] # In this example I would type print data['username'] 

Simple vraiment, un cas de ne pas être en mesure de voir le bois pour les arbres. J'espère que ceci aide quelqu'un d'autre.