HTML WebPy multilpe表单

时间:2016-06-06 17:48:35

标签: python forms web.py

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

我正在尝试使用应用程序并在其上有两个表单:

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

如果您已拥有用户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>

谢谢!

1 个答案:

答案 0 :(得分:0)

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

有两个选项:

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

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

    和第二种形式:

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

    然后您将通过检查已发送的&#34;提交&#34;的值来了解发布的表单。字段。

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