2012-12-28 59 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