2016-06-06 3 views
0

У меня довольно глупый вопрос.HTML WebPy multilpe forms

Я пытаюсь приложение и иметь две формы на нем:

Введите почтовый индекс (кнопка отправки)
или
Войти, если у вас уже есть идентификатор пользователя. (кнопка отправки)

Теперь в моем коде (python с использованием рамки web.py) у меня есть два def POST(self), но какой будет первая форма и вторая форма для входа в систему?

Я смущен. Теперь мой друг говорит, что html не может иметь две разные формы.

Вот код и форма являются неполными - я просто пытаюсь заставить методы работать хорошо, прежде чем я начну захватывать больше данных и строить схему db.

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> 

Спасибо !!

ответ

0

у вас может быть столько форм на странице, сколько хотите, единственная проблема заключается в том, как вы справитесь с ними.

есть 2 варианта:

  1. два отдельных бэкэнды например, /login и /zip обрабатывать сообщения из форм - в виде тега вам нужно будет добавить action атрибут прямого сообщения правильно
  2. одного /index, где вы можете обрабатывать обе формы, но тогда вы должны признать, какая форма была размещена, например, наличием некоторого имени поля (Вы можете использовать подать входной сигнал с тем же именем, но с разными значениями:

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

    и для второй формы:

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

    тогда вы будете знать, какая форма была размещена, проверив стоимость переданного «подать» поле.

наверняка, вы не можете иметь 2 метод остроумия то же имя в определении класса.

+0

Спасибо, Jerzyk ... за подробный ответ. – ranjitcool