2013-04-23 83 views
1
@app.route('/', methods=['GET', 'POST']) 
def login(): 
    if request.method == 'GET': 
     if 'USER_TOKEN' in session: 
      return make_response(render_template('index.html')) 
     return make_response(render_template('login.html')) 
    if request.method == 'POST': 
     print 'data :', request.form 
     return make_response(render_template('index.html')) 

HTML瓶接收没有数据的HTML POST

<form class="form-horizontal" action="/" method="POST"> 
    <div class="control-group"> 
     <label class="control-label" for="email">Email</label> 
     <div class="controls"> 
     <input type="text" id="email" placeholder="Email"> 
     </div> 
    </div> 
    <div class="control-group"> 
     <label class="control-label" for="password">Password</label> 
     <div class="controls"> 
     <input type="password" id="password" placeholder="Password"> 
     </div> 
    </div> 
    <div class="control-group"> 
     <div class="controls"> 
     <button type="submit" class="btn">Sign In</button> 
     </div> 
    </div> 
    </form> 

当我从HTML页面提交的数据,我看到

data : ImmutableMultiDict([]) 

为什么数据丢失?

+1

我相信这是习惯性地在在输入中包含'name'属性的形式;) – Andbdrew 2013-04-23 04:46:53

回答

5

您缺少字段名称(这是ImmutableMultiDict的密钥,这就是为什么表单提交时它看起来为空)。

变化

<input type="text" id="email" placeholder="Email"> 

<input name="<whatever_email_name>" type="text" id="email" placeholder="Email"> 

<input type="password" id="password" placeholder="Password"> 

<input name="<whatever_password_name>" type="password" id="password" placeholder="Password"> 
+0

这就是问题所在,你怎么知道'name ='是需要的?它甚至不在Twitter-bootstrap文档中(http://twitter.github.io/bootstrap/base-css.html#forms)。谢谢 – daydreamer 2013-04-23 04:51:03

+0

与twitter引导无关。给表单域赋名是HTML规范的一部分。 Twitter Bootstrap提供基本的UI功能,在设计师醒来之前马上为您的网站提供动力。 – Nemoden 2013-04-23 04:54:07

+0

我面临的问题,但与邮递员参与。我错过了什么? – karzler007 2016-05-29 18:00:10