Web.py表单未提交?

0 投票
2 回答
1239 浏览
提问于 2025-04-16 19:19

我根据网上找到的几个web.py的例子写了以下代码,但我无法让登录页面正常提交。你们觉得我的代码怎么这么糟糕呢?

另外,为什么我如果想使用会话(sessions),就必须把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()

2 个回答

1

你正在使用一个名为 'i' 的变量,但这个变量并没有被定义过……试试用 'f' 这个变量,它是你为 web.input() 定义的。

1

请查看这里提供的例子( http://webpy.org/cookbook/forms )。我觉得单单使用 form.Form(...) 并不会真正创建一个 <form> 标签,所以请检查一下你输出的 HTML 代码。
基本上,你的代码缺少了 <form name="main" method="post"> ... </form> 这个标签,它应该把你的元素(文本输入框、按钮)包裹起来。

撰写回答