bottleでテンプレートを使用してみる。

やったこと

HTMLファイルのテンプレートを作り、そのテンプレートを読み込んでWebページを表示させる。
テンプレートファイルは、viewsという階層を作り、そこにおいた。

.
├── template.py
└── views
    └── index.html

 

作成コード

前回作成したコード(BottleでTogglのAPIにアクセスしてみる。)に、HTMLのテンプレートを用いて別ファイルを読み込んでみました。
※jinja2をImportしていますが、今回は使用していません。

# coding:utf-8
import bottle,jinja2
from bottle import route, run, template, get, post, request
from bottle import TEMPLATE_PATH, jinja2_template as template
import requests
from requests.auth import HTTPBasicAuth
import json
from json import loads

TEMPLATE_PATH.append("./views")

def check_status_code(email, password):
    """
    メールアドレスとパスワードからステータスコードを出す。
    ステータスコードによって認証が正しく行われているかを判別する。
    """

    # メールアドレスとパスワードからTogglのAPIに接続する。
    r = requests.get('https://www.toggl.com/api/v8/me',
    auth = requests.auth.HTTPBasicAuth(email, password))

    # TogglのAPIに接続できているかの確認(200が出ればOK!)
    status = r.status_code
    if status == 200:
        return True
    else:
        return False

@get('/') # or @route('/')
def login():
    """
    GETで/にアクセスした際の処理
    """
    return template('index.html')

@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:
        return  "<p>メールアドレスまたはパスワードが間違っています。</p>"

if __name__ == "__main__":
    # テスト用のサーバをlocalhost:8080で起動する
    # reloader=Trueにより、ソースを書き換えると自動的に再起動される
    run(host='localhost', port=8080, reloader=True, debug=True)
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title> {{ title }} </title>
</head>
<body>

<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>

</body>
</html>

実行結果

フォームの入力画面が表示されました。

つまづいたところ

TEMPLATE_PATHを指定しないと、
>Template ‘index.html’ not found.
というエラーが出ます。
なので、以下のコードを追加しています。

TEMPLATE_PATH.append("./views")

参考記事

Pythonで一番小さいWEBフレームワークbottle.py その8(TEMPLATE)
Python勉強1日目前半 Bottleで簡単なWebアプリ

コメント

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