PPT - LOG OPT HOME

Download Report

Transcript PPT - LOG OPT HOME

Bottle/Pythonによる
Webアプリ入門
東京海洋大学
久保幹雄
from bottle import route, run
デコレータ(修飾子)@で
関数helloを実行するルートを指定
http://localhost:8080/hello
にアクセスするとhelloを実行
@route('/hello')
def hello():
return "Hello World!"
run(host='localhost', port=8080, debug=True)
ブラウザ http://localhost:8080/hello
Hello World!
クライアントからのデータの受け取り (1)
GETモード(既定値)で localhost:8080/login にアクセスすると,
username と passward をGETして,フォームにpostする HTMLファイルを返す
from bottle import route, request, run, template
@route('/login') #@get(‘login’)でもOK
Formタグでフォーム
def login():
を作る.データを
return '''
フォームにpostする
<form action="/login" method="post">
Username: <input name="username" type="text" />
Password: <input name="password" type="password" />
<input value="Login" name="Login" type="submit" />
</form>
'''
ブラウザ http://localhost:8080/login
名前とパスワードを入
力するタグとLoginボタ
ンを配置
Username
Password
Login
クライアントからのデータの受け取り (2)
下で用いる関数
def check_login(username, password):
if username=="kubo":
return True
else:
return False
POSTモードで localhosr:8080/login にアクセスすると,
request.formsからgetメソッドで得られるusernameとpasswordを保管し,
check_login関数でcheckして,メッセージを返す.
Postされたデータ(forms
辞書に保管されている)を
@route(‘/login’, method=‘POST’) #@post(‘login’)でもOK
getメソッドで受け取る.
def do_login():
キーはタグの名前
username = request.forms.get('username')
(username, password)
password = request.forms.get('password')
if check_login(username, password):
return "<p>Your login information was correct.</p>"
パスワードのチェック(ユー
else:
ザー名がkuboなら真)
return "<p>Login failed.</p>"
HTMLのパラグラフのタグ<p>
を返す.
ファイルのアップロード法 (1)
GETモードで localhost:8080/upload にアクセスすると,
username と passward をGETして,フォームにpostするための HTMLファイルを返す.
from bottle import route, request, run
import os
ファイルアップロー
ドのときには
enctypeを
“multipart/formdata”に設定
@route('/upload')
def upload():
return '''
<form action="/upload" method="post" enctype="multipart/form-data">
Category: <input type="text" name="category" />
Select a file: <input type="file" name="upload" />
<input type="submit" value="Start upload" />
</form>
Inputtypeをfileに
'''
設定
ファイルのアップロード法 (2)
POSTモードで localhosr:8080/upload にアクセスすると,
request.formsからgetメソッドで得られるusernameとpasswordを保管し,
check_login関数でcheckして,メッセージを返す.
filesに保管されたデータ(名
前はタグ名のupload)を辞
書のようにgetメソッドで得
る
@route('/upload', method='POST')
def do_upload():
category = request.forms.get('category')
upload = request.files.get('upload')
name, ext = os.path.splitext(upload.filename)
if ext not in ('.png','.jpg','.jpeg',".JPG"):
return 'File extension not allowed.'
save_path = "./"
upload.save(save_path)
return 'OK'
ファイル名をfilename属性
で得て画像ファイルでない
場合にはメッセージを表示
saveメソッドでファイルを保
存する.
テンプレートの使用法
template関数にHTMLの文
字列(もしくはファイル)を入
力すると整形してくれる
@route('/')
def do():
name = “Bob”
return template( HTMLを記述した文字列
'''
<p>S Hello {{name }} </p>
<%
for i in range(3):
print name,
end
basket=range(3)
%>
<ul>
% for item in basket:
<li>{{item}}</li>
% end
</ul>
'''
,name=name )
{{ 変数名}}でPythonの変
数を代入できる
<% %>で囲んだ部分に
Pythonコードを埋め込める.
ただし end が必要!
% の右にPythonコードを埋
め込める
{{ 変数名}}でPythonの変
数を代入できる
名前付き引数としてプログ
ラム内の変数を受け渡し
ブラウザ出力
Hello Bob
・0
・1
・2