iT邦幫忙

2022 iThome 鐵人賽

DAY 17
0
Modern Web

Willisの後端幼幼班系列 第 17

後端幼幼班Day17 Flask篇 GET & POST

  • 分享至 

  • xImage
  •  

哈囉大家好啊 ~ 今天要介紹得到網頁資料的兩種方式 GET & POST。

抓取參數

request

Flask是透過request這個函數來抓取前端頁面給予的參數,request也是需要經過導入模組才能使用的。

GET

request.args

  • 專案架構

  • 填寫一個輸入username的HTML檔的網頁 login.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Hello Page</title>
  </head>
  <body>
    <form method='get' action={{ url_for('hello') }}>
      <input type="text" name="username"/>
      <input type="submit" value="輸入"/>
    </form>
  </body>
</html>

還記得url_for( )嗎 ? 可以用jinja2的語法回傳喔。

  • 程式碼 app.py
# 導入模組Flask, request, render_template
from flask import Flask, request, render_template

app = Flask(__name__)
app.config["DEBUG"] = True


@app.route('/')
def login():
    return render_template('login.html')  # 登入頁面


@app.route("/hello", methods=['GET', 'POST'])  # methods 路由允許的方式
def hello():
    if request.method == 'GET':  # 使用者使用GET時執行
        return 'Hello' + request.args['username']  # 使用request.args取得前端的username


if __name__ == '__main__':
    app.run()
  • 登入頁面

  • 登入後頁面

request.values

request.values可以抓取POST和GET,沒有限制。

  • 網頁 login.html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Hello Page</title>
  </head>
  <body>
    <form method='get' action={{ url_for('hello') }}>
      <input type="text" name="username"/>
      <input type="submit" value="輸入"/>
    </form>
  </body>
</html>
  • 程式碼 app.py
# 導入模組Flask, request, render_template
from flask import Flask, request, render_template

app = Flask(__name__)
app.config["DEBUG"] = True


@app.route('/')
def login():
    return render_template('login.html')  # 登入頁面


@app.route("/hello", methods=['GET', 'POST'])  # methods 路由允許的方式
def hello():
    if request.method == 'GET':  # 使用者使用GET時執行
        return 'Hello ' + request.values['username']  # 使用request.values取得前端的username


if __name__ == '__main__':
    app.run()
  • 登入頁面

  • 登入後頁面

Post

request.form

  • 網頁 login.html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>登入頁面</title>
  </head>
  <body>
    <form method='post' action={{ url_for('hello') }}>
      <input type="text" name="username"/>
      <input type="submit" value="輸入"/>
    </form>
  </body>
</html>
  • 程式碼 app.py
# 導入模組Flask, request, render_template
from flask import Flask, request, render_template

app = Flask(__name__)
app.config["DEBUG"] = True


@app.route('/')
def login():
    return render_template('login.html')  # 登入頁面


@app.route("/hello", methods=['GET', 'POST'])  # methods 路由允許的方式
def hello():
    if request.method == 'POST':  # 使用者使用POST時執行
        # 使用request.form取得前端的username
        return 'Hello ' + request.form['username']


if __name__ == '__main__':
    app.run()
  • 登入頁面

  • 登入後頁面

    有發現與GET的不同處嗎 ?

request.values

  • 網頁 login.html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>登入頁面</title>
  </head>
  <body>
    <form method='post' action={{ url_for('hello') }}>
      <input type="text" name="username"/>
      <input type="submit" value="輸入"/>
    </form>
  </body>
</html>
  • 程式碼 app.py
# 導入模組Flask, request, render_template
from flask import Flask, request, render_template

app = Flask(__name__)
app.config["DEBUG"] = True


@app.route('/')
def login():
    return render_template('login.html')  # 登入頁面


@app.route("/hello", methods=['GET', 'POST'])  # methods 路由允許的方式
def hello():
    if request.method == 'POST':  # 使用者使用POST時執行
        # 使用request.form取得前端的username
        return 'Hello ' + request.values['username']


if __name__ == '__main__':
    app.run()
  • 登入頁面

  • 登入後頁面

GET與POST的差別

前面說了GET與POST的使用方法,那兩個方式有甚麼不一樣的地方嗎?

  • GET-從指定的資源請求數據
  • POST-向指定的資源提交要被處理的數據

GET提交參數時,會顯示在URL上。

POST是通過表單提交的,所以不會顯示在URL上,更具隱密性。

參考資料

https://www.runoob.com/tags/html-httpmethods.html

結尾

時間過得真快,已經17天了 ! 那今天就到這裡囉~掰掰 o(☆Ф∇Ф☆)o


上一篇
後端幼幼班Day16 Flask篇 前端渲染
下一篇
後端幼幼班Day18 Flask篇 網頁錯誤處理
系列文
Willisの後端幼幼班30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言