Upload
toshiki-noguchi
View
195
Download
0
Embed Size (px)
Citation preview
いまさらながらbottle主にcookieの説明
目次
• ベース
• フォームからデータを読む
• cookie
• cookie使い方
•番外編:python起動と同時に自動でブラウザ立ち上げ
(リンクはスライドショー時のみ使用可)
ベース
•ルーティング@route(‘/yyy’)
def aaa():
return template(‘xxxx.html’)
http://localhost:XXXX/yyyにアクセスするとxxxx.htmlが表示される
ベース
•ルーティング (データ受け取り)@get(‘/yyy’)
def aaa():
return template(‘xxxx.html’)
http://localhost:XXXX/yyyにアクセスするとxxxx.htmlが表示される
getでなくただのrouteでも動作はする
ベース
•ルーティング (データ読み込み)@post(‘/yyy’)
def bbb():
~~~~~~~~
return template(‘xxxx2.html’)
htmlの<form action=“/yyy” method=“post”>で入力されたデータを読み込んで、さまざまな動作を行う。その後xxxx2.htmlが表示される。
postの代わりにroute(‘/yyy’, method=‘POST’)でも同じ。
フォームからデータを読む
• type=“text”, “submit”, “hidden”の場合aに代入する
a = request.forms.get(‘name’)注)nameはhtmlのinput内のnameで指定したものデータは数字も含めすべてstr型で代入される
• type=“file”の場合aにファイルを格納する
a = request.files.get(‘name’)
• type=“checkbox”の場合a = request.params.getlist(‘name’)とすると、aにstr型を要素としたリストが代入される
cookie
• cookieは使わなくても問題ない。ただ使えば若干(html数行程度)楽になると言えなくもない(笑)
例)最初に施設数を入力
→各施設の面積や従業員数を入力するフォームを表示、入力
→いろいろ計算
を行う場合、施設数を𝑛に格納したとすると、それをフォーム作成用の
htmlに送る。その後でいろいろ計算するときに𝑛が使いたいときには、
bottleの構成上htmlで<input type=“hidden”>を使って再度𝑛に施設数を
格納しなおす必要がある。(次スライドの赤字部分)
cookie
@post('/')def post():
if request.forms.get('submit'):n = request.forms.get('number_of_facility')return template('xxxx2.html', n = n)
elif request.forms.get('submit_form'):n = request.forms.get('number_of_facility')worker = request.forms.get('worker')area = request.forms.get('area')........
<input type=“text” name=“number_of_facility”>
<input type=“hidden” name=“number_of_facility” value=“{{n}}”>
cookie• ということでcookieを使って以下のように書けば、html内に<input
type=“hidden” name=“~~” value=“~~”>を書かなくて済む。@post('/')
def post():
if request.forms.get('submit'):
n = request.forms.get('number_of_facility')
response.set_cookie('nof', n)
return template('xxxx.html', n = n)
elif request.forms.get('submit_form'):
n = request.get_cookie('nof')
worker = request.forms.get('worker')
area = request.forms.get('area')
........
cookie
• ここまでやればお気づきだろうが、html内で
<input type=“hidden” ~~>
が減った代わりに、bottle内で
response.set_cookie(~~)
が増えているから、結局一緒だ(笑)
だが!!!
この場合はcookieで保存したものがただの値であるからであって、もしcookieでリストや辞書を保存するのであれば、総合的に見て行数が減る。
cookie使い方
• cookieを保存する
response.set_cookie(‘name’, value)
• cookieから受け取る (aに代入)
a = request.get_cookie(‘name’)
nameと言う名前のcookieにvalueという値を保存する
nameと言う名前のcookieに保存されているデータを受け取る
cookie使い方
• cookieは誰でも容易に読めるため、セキュリティが脆弱。よって保護したいデータの場合は、署名をつけることができ(secret引数)、ログイン認証を行うことができる。
•以下はnameというcookieにusernameをpasswordという署名付きで保存。そしてpasswordと言う署名を認証してnameに保存されているデータを受け取る。
response.set_cookie(‘name’, username, secret=‘password’)
request.get_cookie(‘name’, secret=‘password’)
python起動と同時に自動でブラウザ立ち上げ
• pythonのwebbrowserモジュール内、openメソッドを使う
from bottle import *
import webbrowser as web
@route(‘/yyy’) ※最初に開きたいroute
~~~~~
web.open(‘http://localhost:XXXX/yyy’)
run(host=‘localhost’, port=‘XXXX’)