2017-07-02 129 views
0

我剛開始學習燒瓶,作爲一個實踐項目,我想建立一個簡單的網站,要求用戶輸入他們的名字,並在新頁面上用他們的名字打招呼。我一直無法通過表單獲取用戶的姓名,並且由於「錯誤的請求」錯誤而將其顯示在新頁面上。我的代碼如下。燒瓶形式不工作

這是與它的形式,我的索引頁:

<!DOCTYPE html> 
<html> 
<head> 
    <title>Index</title> 
</head> 
<body> 
    <h1>Practice index page</h1> 
    <h2>Welcome to my practice web page.</h2> 

    <form action = "/firstname"> 
     <p>What's your name?</p> 
     <input type = "text" name = "yourname"><br> 
     <input type = "submit" value = "Submit"> 
    </form> 
</body> 
</html> 

這是我application.py文件:

from flask import Flask 
from flask import render_template, request, redirect 
app = Flask(__name__) 

@app.route('/') 
def hello_world(): 
    return render_template('index.html') 

@app.route('/firstname') 
def first_name(): 
    yourname = request.form['yourname'] 
    return render_template('firstname.html', name = yourname) 

這是我firstname.html文件:

<!DOCTYPE html> 
<head> 
    <title>My name is</title> 
</head> 
<body> 
    <h1>Hello</h1> 
    <h2>Your name is {{name}}.</h2> 
</body> 

索引頁加載正常。當用戶的名字被硬編碼時,firstname.html模板也可以正常加載,只有當我從問題出現的形式中得到它的時候。

我一直在這裏呆了幾個小時,看着YT的視頻,瘋了谷歌搜索,仍然無法弄清楚什麼是錯的,所以我非常感謝一些幫助!

回答

1

默認情況下,瓶路線只回答GET請求。你可以告訴first_name爲了回答這兩個GET和POST請求,像這樣:

@app.route('/firstname', methods=['GET', 'POST']) 
def first_name(): 
    yourname = request.form['yourname'] 
    return render_template('firstname.html', name = yourname) 

您還需要設置表單方法爲POST,這樣yourname爲形式的數據(在request.form可讀)被髮送,而不是作爲一個URL參數(可在request.args中閱讀)。

<form action = "/firstname" method="POST"> 
    <p>What's your name?</p> 
    <input type = "text" name = "yourname"><br> 
    <input type = "submit" value = "Submit"> 
</form> 
+0

我認爲這可能是問題,但在方法中包括POST也沒有解決問題。我仍然收到'錯誤請求'錯誤。老實說,在智慧結尾:( –

+0

這很奇怪,你是否也編輯過表單方法?如果在'request.form'中沒有找到'yourname',那麼Flask會引發一個錯誤的請求錯誤 – Bovarysme

+1

哦,我完全忘了更改表單方法,現在一切都好了,謝謝! –

-1

您需要將變量作爲字典傳遞,而不是直接傳遞。

像這樣

@app.route('/firstname') 
def first_name(): 
    yourname = request.form['yourname'] 
    return render_template('firstname.html', **{"name": "yourname"}) 
+1

這相當於將'yourname'作爲keyw ord參數。 – Bovarysme

1

使用request.args['yourname'],而不是request.form['yourname']

您的index.html形式呼籲/姓名URL以get方法和name作爲查詢字符串

GET /firstname?yourname=Sunny HTTP/1.1 

,所以你需要訪問查詢參數與request.args ['yourname'] & not with request.form ['yourname']