【问题标题】:HTML WebPy multilpe formsHTML WebPy 多重表单
【发布时间】:2016-06-06 17:48:34
【问题描述】:

我有一个相当愚蠢的问题。

我正在尝试一个应用程序,上面有两个表单:

输入邮政编码(提交按钮)

如果您已有用户 ID,请登录。 (提交按钮)

现在在我的代码中(使用web.py 框架的python)我有两个def POST(self),但是第一个表单和第二个登录表单调用哪个?

我很困惑。现在我的朋友告诉我 html 不能有两种不同的形式。

这是代码,但表单不完整 - 我只是想在开始获取更多数据并构建数据库架构之前让方法运行良好。

import web
from web import form

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

urls = (
    '/', 'index'
)

myform = form.Form(
    form.Textbox("Zip Code",
                 form.regexp('^\d{5}$', 'Not a zip code'),
                 description='Enter a 5 digit zip code',
                 maxlength = '5'),
)

myloginform = form.Form(
    form.Textbox("Username",
                      form.regexp('^[^<>\s\@]+(\@[^<>\s\@]+(\.[^<>\s\@]+)+)$', 'Invalid username'),
                      description='Enter your username'),
)

class index:
    def __init__(self): ** i still dont know wtf this does.. 
        pass

    def GET(self):
        form = myform()
        myloginform1 = myloginform()
        return render.index(form,myloginform1)

    def POST(self):
        form = myform()
        if not form.validates():
            return render.index(form)
        else:
            return "The zip code you are located is: %s" % (form['Zip Code'].value)

    def POST(self):
        myloginform1 = myloginform()
        if not myloginform1.validates():
            return render.index(myloginform1)
        else:
            return "Welcome %s" % (myloginform1['Username'].value)

class testfunc:
    def GET(self):
        return "Test function returning!"

if __name__ == "__main__":
    app = web.application(urls, globals())
    app.run()

index.html 在下方

$def with (form, myloginform1)

<html>
<head><title>8reps Welcome.. </title></head>
<body>

<h3>Hi</h3>

<p> Lets find some results in your area.. </p>
<form name="main" method="post">
    $if not form.valid: <p class="error">Try again...</p>
    $:form.render()
    <input type="submit" /> </form>

<p> Already registered? Login as a user..</p>
<form name="login" method="post">
    $if not myloginform1.valid: <p class="error">Try again..</p>
    $:myloginform1.render()
    <input type="submit" />Login</form>
</form>
</body>
</html>

谢谢!!

【问题讨论】:

    标签: python forms web.py


    【解决方案1】:

    您可以在页面上拥有任意数量的表单,唯一的问题是您将如何处理它们。

    有两种选择:

    1. 两个独立的后端,例如/login/zip 处理来自表单的 POST - 在表单标签中,您需要添加 action 属性以正确引导 POST
    2. 单个/index 可以同时处理这两个表单,但随后您需要识别发布了哪个表单,例如通过存在一些命名字段(您可以使用具有相同名称但不同值的提交输入:

      <input name="submit" type="submit" value="Zip" />
      

      对于第二种形式:

      <input name="submit" type="submit" value="Login" />
      

      然后您将通过检查已发送的“提交”字段的值来知道发布了哪个表单。

    当然,类定义中不能有两个同名的方法。

    【讨论】:

    • 谢谢 Jerzyk ... 的详细回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多