2017/08/24 2019/12/06
今回の記事では、Bottleのリクエストメソッドについて書きたいと思います。
これまでのプログラムの中で@app.route(URLパス)と書いていたのはデフォルトでメソッドを指定しなければGET処理のルーティングでした。Bottleではパラメータでメソッドを指定してルーティングさせる他にもっと簡潔な書き方があります。 以下に示す書き方はどれも同じ処理の書き方です。
1 2 3 4 5 6 7 8 |
#POSTの場合 @route('/login', method='POST') @post('/login') #GETの場合 @route('/login', method='GET') @route('/login') @get('/login') |
メソッドを意識してルーティングするなら下記の書き方がわかりやすくて良いですね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
from bottle import get, post, request # or route @get('/login') # or @route('/login') def login(): return ''' <form action="/login" method="post"> Username: <input name="username" type="text" /> Password: <input name="password" type="password" /> <input value="Login" type="submit" /> </form> ''' @post('/login') # or @route('/login', method='POST') def do_login(): username = request.forms.get('username') password = request.forms.get('password') if check_login(username, password): return "<p>Your login information was correct.</p>" else: return "<p>Login failed.</p>" |
デコレータは以下のように重ね合わせも可能だ。ログインの場合などはログインする前とログイン認証、ログイン認証した後が考えられる。ユーザ関数の中のどのメソッドで呼び出されたのか判定しロジックを充ててゆくように記述する。判定はクッキーやセッションで認証しているか否かでわかるだろう。
1 2 3 4 5 |
@get('/login') @post('/login') @view('login') def login_process(): 処理は省略 |
メソッドのデコレータはget(), post(), put(), delete() or patch()が用意されています。