Веб-форма с помощью Web.py на PythonAnywhere - PullRequest
5 голосов
/ 30 января 2012

Я пытаюсь сделать простой веб-скрипт, используя платформу PythonAnywhere.com web.py.Мое намерение состоит в том, чтобы создать простую форму, которая получает данные текстовых полей и может работать с ними так же, как мы делаем с PHP и так далее.Это мой основной скрипт:

import web
from web import form
import MySQLdb

render = web.template.render('/home/user/templates/')

conn = MySQLdb.connect("mysql.server","user","*********","userdb")
curs = conn.cursor()

curs.execute('''create table if not exists Dados (
id int not null auto_increment primary key,
nome varchar(200),
item1 varchar(50),
item2 varchar(50),
item3 varchar(50),
item4 varchar(50),
item5 varchar(50));
''')

urls = (
  '/', 'index'
)

formula = form.Form(
    form.Textbox('Nome', id='nome'),
    form.Textbox('Item 1', id='it1'),
    form.Textbox('Item 2', id='it2'),
    form.Textbox('Item 3', id='it3'),
    form.Textbox('Item 4', id='it4'),
    form.Textbox('Item 5', id='it5'),
    )


class index:
    def GET(self):
        form = formula()        
        return render.formtest(form)

    def POST(self):
        form = formula()        
        return render.finaliza(form['Nome'].value)

# comment out these two lines if you want to use another framework
app = web.application(urls, globals())
application = app.wsgifunc()

Тогда у меня есть два шаблона в HTML, этот хранит форму:

$def with (form)

<form name="main" method="post"> 
$:form.render()
<input type="submit" name="send" id="envia" value="Ok" />    </form>

И это должно дать результат после POST:

$def with (nome)

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
Congratulations $:nome !
</body>
</html>

Все работает нормально, пока не нажмете кнопку Ok.Он показывает правильный шаблон, но не показывает переменную $ nome.Вы можете проверить это поведение по этой ссылке: http://jonathan_hepp.pythonanywhere.com/

Я начинаю с web.py и PythonAnywhere, поэтому, должно быть, я что-то не так делаю, но не могу это выяснить.Не могли бы вы помочь мне?Спасибо.

РЕДАКТИРОВАТЬ:

Я только сейчас выяснил, что если я передам значение текстового поля в виде строки, результат будет другим.Страница результатов гласит: "Поздравления нет!"Это заставляет меня думать, что на самом деле POST не получает значение, которое я печатаю в текстовом поле.Таким образом, код, кажется, в порядке, но почему-то я не сделал это правильно, поэтому он не может достичь значения во входных данных формы.Все еще не работает.

решено:

ОК.Я понял, что опция form.Form() не создает и выводит html-формы.На самом деле, когда вы смотрите на исходный код страницы формы, вы видите, что то, что я предполагал, было формой простой.Поэтому я только что превратил форму в шаблон для тестирования непосредственно в html, и теперь он работает довольно хорошо.Просто глупая ошибка, но если кто-то другой сделает это, просто сделайте то же самое.Спасибо всем.

Ответы [ 2 ]

3 голосов
/ 30 января 2012

Кажется, что переменная в шаблоне finaliza на самом деле должна быть "Nome".Итак:

Congratulations $:Nome ! 

Могу сделать свое дело.Не забудьте перезапустить ваше веб-приложение на вкладке Web в PythonAnywhere после внесения изменений, иначе вы их не увидите.

0 голосов
/ 27 августа 2013

Я использую ту же структуру web.py. когда я пытаюсь получить к нему доступ через localhost и URL после того, как /templates/tutorial.html

тогда я вижу кнопку "отправить", но с этими знаками $ 1003 *

$ def с (форма, текст) $: form.render ()

$ Текст

Вот tutorial.html

$def with (form, text)

<head>
    <title>Python and AJAX tutorial for beginners with webpy and jQuery</title>
    <link rel="stylesheet" type="text/css" href="/static/tutorial.css" />

    <script type="text/javascript" src="/static/jquery.js"></script>

    <script type="text/javascript">
                            jQuery(document).ready(function() {
                            jQuery(".button").click(function() {
                                    var input_string = $$("input#textfield").val();
                                    jQuery.ajax({
                                            type: "POST",
                                            data: {textfield : input_string},
                                            success: function(data) {
                                            jQuery('#foo').html(data).hide().fadeIn(1500);
                                            },
                                            });
                                    return false;
                                    });
                            });

                    </script>
</head>

<body>
    <br>
    <form class="form" method="post"> 
    $:form.render()
    <input class="button" type="submit" value="send"/>    
    </form>

    <br><br>
    <span id="foo">$text</span>        
</body>

Как я могу получить значения этих переменных?

$ def с (форма, текст) $: form.render ()

$ Текст

...