2012-12-28 38 views
4

我正试图在烧瓶中为自己的教育设置一个简单的表单。我有一个页面的login.html这种形式的代码:接收空的表单的烧瓶

<form action="{{ url_for('login') }}" method="post"> 
    <div> 
     <label for="username">Username</label> 
     <div> 
      <input type="text" id="username" name="username" placeholder="Username"> 
     </div> 
    </div> 
    <div> 
     <label for="password">Password</label> 
     <div> 
      <input type="password" id="password" name="password" placeholder="Password"> 
     </div> 
    </div> 
    <div > 
     <input class="btn" type="submit"> 
    </div> 
</form> 

我使用如下代码接受它,但瓶返回一个空request.form所以我不能处理它。

@app.route('/login', methods=['GET', 'POST']) 
def login(): 
    if request.method == 'POST': 
     request.form['username'] 
     ... 

我真的不想学习另一种库(WTForms),现在,我使用的引导,这样会加重头痛。我在Flask/HTML中没有看到什么?

+1

请求是否达到您的查看功能?也许表单具有不同的网址,而不是“/ login”?尽量只放“”。在行动中。只是有兴趣,如果它真的落在视图中,如你所料。 –

回答

-2

的login.html

{% extends "layout.html" %} 

{% block content %} 
    <div class="form"> 
    <h2>Sign In</h2> 

{% for field in form.errors %} 
{% for error in form.errors[field] %} 
    <div class="alert alert-error"> 
     <strong>Oops...</strong> {{error}}. 
    </div> 
{% endfor %} 
{% endfor %} 

    <form action="{{ url_for('login') }}" method=post> 
    {{ form.hidden_tag() }} 

    {{ form.email.label }} 
    {{ form.email }} 

    {{ form.password.label }} 
    {{ form.password }} 

     <p> <input id="submit" name="submit" type="submit" class="btn btn-inverse" value="Sign In"></p> 
    </form> 
</div> 
{% endblock %} 

forms.py

class SigninForm(Form): 
     email = TextField("email", [validators.Required("Please enter your email")]) 
     password = PasswordField('Password', [validators.Required("Please enter a password.")]) 
     submit = SubmitField("Sign In") 

然后导入signinform在你的意见,并创建你的登录方法是这样

@app.route('/login', methods=['GET', 'POST']) 
def signin(): 
    form = SigninForm() 
    if form.validate_on_submit(): 
     session['email'] = form.email.data 

     flash('You are logged in') 
     return redirect(url_for('dashboard')) 
    return render_template('signin.html', form=form) 

参考本教程更详细的说明 http://pypix.com/python/building-flask-blog-part-1/

2

我有这个问题。 某些工具(如邮递员或某些图书馆或网络浏览器)以烧瓶未标识为发布值的方式发送数据。从我的角度来看,这是一个瓶颈问题。

这是我遵循的解决方法: 1 - 我使用json发送信息。看看这样:

How to send a JSON object using html form data

2 - I而不是获取使用参数: 我用这个的request.form [ “myparamname”] 值=:

json_data = request.get_json(force=True) 

value = json_data["myparamname"] 
6

我有这个问题,但这是因为我忘了给我的输入元素分配一个name属性,我试图通过id属性参考访问表单数据代替

我的HTML和Python 如下图所示

HTML

<input type="text" id="usernameTxtBx"> 

的Python

request.form['usernameTxtBx'] 

有什么现在做:

HTML

<input type="text" name="username" id="usernameTxtBx"> 

的Python

request.form['username'] 

我还需要确保我使用的是POST请求。一个GET请求在我的Python代码中给了我一个空字典。

OP没有犯这些错误。但是这可能会帮助那些在这个线程上绊倒的人。

+1

'id =“usernameTxtBx”'是不必要的,因为它没有反映在请求中。您可以通过'request.args'而不是'request.form'来访问GET和POST变量,它们只访问POST – avloss