やったこと
前回(bottleでテンプレートを使用してみる。)からの続き。
今回は以下のことを実施。
- {% extends ‘[ファイル名]’ %}を用いて、HTMLファイルのテンプレートを継承。
- {% block contents %}{% endblock %}といった機能を使って、フォーム部分をform.htmlに記入。
- メールアドレスとパスワードが間違っていたとき、form_failed.htmlというテンプレートを呼んで、間違っている旨を表示。
. ├── template.py └── views └── base.html └── form.html └── form_failed.html
作成コード
※form.pyは変更したところのみを表示
@get('/') # or @route('/') def login(): """ GETで/にアクセスした際の処理 """ title = 'Togglのデータをエクスポートするツール' return template('form.html',title=title) @post('/') # or @route('/', method='POST') def do_login(): """ POSTで/にアクセスした際の処理 """ # フォームからPOSTされたデータを取得する email = request.forms.get('email') password = request.forms.get('password') # ログイン判定を行う if check_status_code(email, password): return template("<p>認証に成功しました。あなたのメールアドレスは {{email}}です。</p>", email=email) else: title = "認証失敗" return template('form_failed.html',title=title)
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title> {{ title }} </title> </head> <body> {% block contents %} {% endblock %} </body> </html>
{% extends 'base.html' %} {# base.html の contents の中に入れるコンテンツ #} {% block contents %} <h1>Togglのデータをエクスポートするツールです。</h1> <form action="/" method="post"> Email: <input name="email" type="text" /><br> Password: <input name="password" type="password" /> <input value="登録" type="submit" /> </form> {% endblock %}
{% extends 'base.html' %} {# base.html の contents の中に入れるコンテンツ #} {% block contents %} <h1>Togglのデータをエクスポートするツールです。</h1> <h2>メールアドレスかパスワードが間違っています。<br> 正しいメールアドレスとパスワードを入力してください。</h2> <form action="/" method="post"> Email: <input name="email" type="text" /><br> Password: <input name="password" type="password" /> <input value="登録" type="submit" /> </form> {% endblock %}
実行結果
入力したメールアドレスとパスワードの組み合わせが間違っていると以下のように表示される。
つまづいたところ
コマンドプロンプト上で、以下のようなエラーが出た。ただ、気にしなくていいらしい。
requests 使用時の ResourceWarning: unclosed 回避策
C:\Users\*****\AppData\Local\Programs\Python\Python37\lib\site-packages\bottle.py:3125: ResourceWarning: unclosed <socket.socket fd=664, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8080)>
参考記事
「bottle」+「jinja2」を使ってサイト構築 3 共通テンプレートの利用
次にやること
いよいよ肝となる、データをエクスポートする部分の機能を追加しようと思います。
データをエクスポートするところのコードはすでに作成しているので、あとは表示の問題かなー。
コメント