LoginSignup
1
1

More than 1 year has passed since last update.

(自分用)Flask_3(form,POSTとGET)

Last updated at Posted at 2020-06-18

項目

  1. 入力フォームと軽くフォームとは
  2. POSTメソッドで掲示板的なやつ
  3. GETメソッドで掲示板的なやつ

1.入力フォームでフォームを触る

  • ただフォームを作るだけならpy側は何もいじらなくて大丈夫
html
<form action="/result" method="post">
    <label for="article">投稿</label>
    <input type="text" name="article">
    <p></p>
    <label for="name">名前</label>
    <input type="text" name="name">
    <button type="submit">送信する</button>
</form>
  • action="/result"で/resultにデータを送るよと指定している
  • method="post"でなんのメソッド使うかを決める
  • input type="text" name="article"textで1行入力欄を作るって決めて、そこに入力されたデータにarticleって色付けをしている
  • 下もだいたい同じ
  • <button type="submit">送信する</button>submitって指定する事で、データを送るボタン作ってる

  • この<form>は入力・送信フォームを作成する際に使用する

2.POSTメソッド使って入力データを受信する

  • まず受信するためのpython側での準備
python
from flask import Flask, request, render_template
app = Flask(__name__)

@app.route("/")
def show():
    message = "Hello World"
    return render_template("form.html", message = message)

@app.route("/result", methods=["POST"])
def result():
    article = request.form["article"]
    name = request.form["name"]
    return render_template("form.html",article = article, name = name)
  • requestを使うって上で宣言する
  • @app.route("/result", methods=["POST"])で上のhtml側で指定したアドレスを指定して、POSTメソッドを使うよとも書いとく
  • 変数やってた所はrequest.form["~~~"]で、html側でつけたname属性のデータを受け取れるようにする
    ここではarticleとかを受け取ってる
  • あとは大体見たまま
html
<form action="/result" method="post">
    <label for="article">投稿</label>
    <input type="text" name="article">
    <p></p>
    <label for="name">名前</label>
    <input type="text" name="name">
    <button type="submit">送信する</button>
</form>
<p>{{ article }} {{ name }}</p>
  • 上のhtmlと大体同じなんだけど、{{ article }} {{ name }}ここだけ違う
    まあ変数表示するのと同じこと

3.GETメソッド使って入力データを受信する

  • GETメソッド使うと、入力データを受信して/resultを表示する時、
    /result?article=Hello&name=Worldって感じで、アドレスに入力内容が出ちゃう
python
from flask import Flask, request, render_template
app = Flask(__name__)

@app.route("/")
def show():
    message = "Hello World"
    return render_template("form.html", message = message)

@app.route("/result", methods=["GET", "POST"])
def result():
    if request.method == "POST":
        article = request.form["article"]
        name = request.form["name"]
    else:
        article = request.args.get("article")
        name = request.args.get("name")
    return render_template("form.html", article = article, name = name)
  • methods=["GET", "POST"]でどっちのメソッドも対応するようにしてる
  • if request.method == "POST":でリクエストしたメソッドがPOSTの時...って感じ
  • GETはarticle = request.args.get("article")の様に、request.args.get("~~~")って書く

  • htmlに関してはメソッド書いたところをmethod="get"にしておけばOK

4.終わりに

  • とりあえずこんな感じで
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1