2010-09-10 7 views
4

J'essaye de construire une page Web simple avec plusieurs cases à cocher, une zone de texte et un but de soumission.CherryPy - enregistrement des cases à cocher de sélection aux variables

Je viens de tomber sur la programmation Web en Python et j'essaie de comprendre comment le faire avec CherryPy.

Je dois associer chaque case à une variable afin que mon fichier .py sache lequel a été sélectionné en cliquant sur le bouton 'Démarrer'. Quelqu'un peut-il donner un exemple de code? Ai-je un avantage, y compris un compilateur Javascript Python comme Pyjamas?

<form action="../remote_targets/ssh_grab.py"> 
    <label for="goal"><strong>Host Availability:</strong></label> 
    <input style="margin-left: 30px;" type="checkbox" name="goal[]" value="cpu" /> CPU idle<br> 
    <input style="margin-left: 30px;" type="checkbox" name="goal[]" value="lighttpd" /> Lighttpd Service<br> 
    <input style="margin-left: 30px;" type="checkbox" name="goal[]" value="mysql" /> Mysql Service<br> 
</form> 

Merci!

+0

le style '" foo [] "' pour les éléments de formulaire de liste est un artefact de Ruby on Des rails. Ces noms seront automagiquement rassemblés dans une liste, bien que des noms comme "foo" 'soient laissés comme valeurs scalaires. Je suis bien pratique, mais complètement externe aux formulaires HTML ou HTTP, et pas largement implémenté dans tout autre framework web, en python ou autre. – SingleNegationElimination

Répondre

9

Voici un exemple minimal:

import cherrypy 

class Root(object): 
    @cherrypy.expose 
    def default(self, **kwargs): 
     print kwargs 
     return '''<form action="" method="POST"> 
Host Availability: 
<input type="checkbox" name="goal" value="cpu" /> CPU idle 
<input type="checkbox" name="goal" value="lighttpd" /> Lighttpd Service 
<input type="checkbox" name="goal" value="mysql" /> Mysql Service 
<input type="submit"> 
</form>''' 

cherrypy.quickstart(Root()) 

Et est ici la sortie du terminal:

$ python stacktest.py 
[10/Sep/2010:14:25:55] HTTP Serving HTTP on http://0.0.0.0:8080/ 
CherryPy Checker: 
The Application mounted at '' has an empty config. 
Submitted goal argument: None 
127.0.0.1 - - [10/Sep/2010:14:26:09] "GET/HTTP/1.1" 200 276 "" "Mozilla..." 
Submitted goal argument: ['cpu', 'mysql'] 
127.0.0.1 - - [10/Sep/2010:14:26:15] "POST/HTTP/1.1" 200 276 "http://localhost:8003/" "Mozilla..." 
[10/Sep/2010:14:26:26] ENGINE <Ctrl-C> hit: shutting down app engine 
[10/Sep/2010:14:26:26] HTTP HTTP Server shut down 
[10/Sep/2010:14:26:26] ENGINE CherryPy shut down 
$ 

Comme vous pouvez le voir, CherryPy recueillera plusieurs contrôles avec le même nom dans une liste. Vous n'avez pas besoin du suffixe [] pour lui dire de le faire. Passez ensuite en revue la liste pour voir quelles valeurs ont été soumises. (Gardez à l'esprit que, si un seul élément est sélectionné, l'argument goal sera une seule chaîne au lieu d'une liste!)

+0

Vous êtes un saint! Je voterais sur votre réponse si j'avais déjà les points. Merci de m'avoir poussé dans la bonne direction. J'ai la plupart du temps fonctionné, J'utilise aussi 'argument_name'.length pour protéger contre votre "si un seul élément est sélectionné, alors l'argument goal sera une chaîne unique au lieu d'une liste" Attention. Maintenant, je vais devoir déchiffrer comment intégrer quelques CSS de base (que je connais encore zéro :) ) Quelqu'un peut-il me diriger vers quelques exemples de petits projets dans CherryPy comme celui-ci? Je n'ai pas été en mesure de google rien de plus que la vanille 'Hello world!'/Exemples de base du blog –

+0

A propos, "'argument_name'.length" En fait, j'ai fini par utiliser type (argument_name) pour différencier comment extraire les données –