bottleでテンプレートを継承してみる。

やったこと

前回(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 共通テンプレートの利用

次にやること

いよいよ肝となる、データをエクスポートする部分の機能を追加しようと思います。
データをエクスポートするところのコードはすでに作成しているので、あとは表示の問題かなー。

 

 

コメント

タイトルとURLをコピーしました