Web.py Форма не публикуется?

#python #forms #login #web.py

#python #формы #аутентификация #web.py

Вопрос:

Я написал следующее на основе нескольких разных web.py примеры, которые я нашел, но я не могу опубликовать страницу входа, есть идеи, почему мой код ооочень foobar?

p.s также, почему кажется, что для web.config.debug должно быть установлено значение false, если я хочу использовать сеансы?

 import web 
import db 
from web import form


login = form.Form(
    form.Textbox('username'),
    form.Password('password'),
    form.Button('Login'), )

urls = (
    '/', 'Index',
    '/login', 'Login',
    '/home', 'Home', )

web.config.debug = False 
app = web.application(urls, globals())
session = web.session.Session(app, web.session.DiskStore('sessions'))


class Login:
    def GET(self):
        f = login()
        return render.register(f)

    def POST(self):
        f = web.input()
        check = db.db_query('select * from users where username=? and password=?', (i.username, i.password))
        if check:
            session.loggedin = True
            session.username = i.username
            raise web.seeother('/home')
        else: return render.base("Those login details don't work.")


class Index:
    def GET(self):
        return 'index'

class Home:
    def GET(self):
        return 'home'


if __name__ == '__main__':
    app.run()
  

Комментарии:

1. «p.s также, почему кажется, что для web.config.debug должно быть установлено значение false, если я хочу использовать сеансы?» — поскольку заголовки сеансов / cookie должны быть отправлены перед содержимым страницы, поэтому, если какие-либо сообщения отладки отправляются перед отправкой сеансов / cookie, они не будут работать

2. Ошибка может быть в register шаблоне. Можете ли вы поделиться этим?

Ответ №1:

Пожалуйста, проверьте представленный здесь пример ( http://webpy.org/cookbook/forms ), мне кажется, что простое выполнение form.Form(…) на самом деле не создает тег, поэтому, пожалуйста, проверьте свой выходной HTML.
По сути, в ней отсутствуют <form name="main" method="post"> ... </form> все ваши элементы (textinput, button)

Ответ №2:

Вы используете переменную ‘i’, которая не была определена…попробуйте использовать ‘f’, который вы определили для web.input()