前回ではSQLite3に登録された商品情報を検索する機能を作成しましたが、今回は商品情報を登録する機能を作成していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
instance └── create_db.py └── itemdb.sqlite3 web └── itemdb.py └── __init__.py └── templates | └── base.html | └── newitem.html (1)・・・ 新規 | └── index.html (2)・・・ 更新 └── items.py (3)・・・ 更新 └── static └── style.css |
(1)newitem.html
商品情報を登録するページを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
{% extends 'base.html' %} {% block title %}新規商品{% endblock %} {% block content %} <h2>新規商品の登録</h2> <form class="newform" method="post"> <table> <tr> <td><label for="item_name">商品名:</label></td> <td><input name="item_name" id="item_name"></td> </tr> <tr> <td><label for="price">価格:</label></td> <td><input name="price" id="price"></td> </tr> <tr> <td><input type="submit" value="登録"></td> </tr> </table> </form> {% endblock %} |
・8~22行目:商品情報を機能を追加(要求形式は「POST」、パラメータ名は「newitem」)
(2)index.html
商品登録へのリンクを追加します。
1 2 3 4 5 6 7 |
(省略) {% block content %} <a href="{{url_for('items.newitem')}}">新規商品はこちら</a> <div class="message">{{message}}</div> (省略) |
・<a href>...:商品登録ページのリンク
(3)items.py
商品登録するための処理を追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
from flask import ( Blueprint, render_template, request, redirect, url_for ) (省略) @bp.route('/newitem', methods=('GET', 'POST')) def newitem(): if request.method == 'POST': item_name = request.form['item_name'] price = request.form['price'] db = get_db() db.execute("INSERT INTO items (item_name, price) VALUES (?, ?)", (item_name, price)) db.commit() return redirect(url_for('items.index')) return render_template('newitem.html') |
・2行目:redirect, url_forをインポートに追加
・8~22行目:商品情報を機能を追加(要求形式は「POST」、パラメータ名は「newitem」)
・9行目:methodsを追加(最初に開いたとき[GET]と、値を送信したとき[POST])
・10~15行目:POSTの場合での処理
・17行目:POST以外(GET)の場合での処理
実行結果は以下になります。
・検索画面(「新規商品はこちら」のリンクが追加され、選択)
・登録画面(商品情報を入力) ⇒ ”れんこん”,”200″を入力
・登録後(商品情報画面へ戻る) ⇒ ”れんこん”,”200″が追加
以上です。