Presentation is loading. Please wait.

Presentation is loading. Please wait.

Bottle/Pythonによる Webアプリ入門

Similar presentations


Presentation on theme: "Bottle/Pythonによる Webアプリ入門"— Presentation transcript:

1 Bottle/Pythonによる Webアプリ入門
東京海洋大学 久保幹雄

2 from bottle import route, run
@route('/hello') def hello(): return "Hello World!" run(host='localhost', port=8080, debug=True) 関数helloを実行するルートを指定 にアクセスするとhelloを実行 ブラウザ  Hello World!

3 名前とパスワードを入力するタグとLoginボタンを配置
クライアントからのデータの受け取り (1) GETモード(既定値)で localhost:8080/login にアクセスすると, username と passward をGETして,フォームにpostする HTMLファイルを返す from bottle import route, request, run, template @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" name="Login" type="submit" /> </form> ''' Formタグでフォーム を作る.データをフォームにpostする 名前とパスワードを入力するタグとLoginボタンを配置 ブラウザ  Username Password Login

4 def check_login(username, password): if username=="kubo": return True
クライアントからのデータの受け取り (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して,メッセージを返す. @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>" return "<p>Login failed.</p>" Postされたデータ(forms辞書に保管されている)をgetメソッドで受け取る. キーはタグの名前(username, password) パスワードのチェック(ユーザー名がkuboなら真) HTMLのパラグラフのタグ<p>を返す.

5 ファイルアップロードのときにはenctypeを“multipart/form-data”に設定
ファイルのアップロード法 (1) GETモードで localhost:8080/upload にアクセスすると, username と passward をGETして,フォームにpostするための HTMLファイルを返す. from bottle import route, request, run import os @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> ''' ファイルアップロードのときにはenctypeを“multipart/form-data”に設定 Inputtypeをfileに設定

6 POSTモードで localhosr:8080/upload にアクセスすると,
ファイルのアップロード法 (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メソッドでファイルを保存する.

7 template関数にHTMLの文字列(もしくはファイル)を入力すると整形してくれる テンプレートの使用法
@route('/') def do(): name = “Bob” return template( ''' <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 ) HTMLを記述した文字列 {{ 変数名}}でPythonの変数を代入できる <% %>で囲んだ部分にPythonコードを埋め込める. ただし end が必要! % の右にPythonコードを埋め込める {{ 変数名}}でPythonの変数を代入できる ブラウザ出力Hello Bob ・0 ・1 ・2 名前付き引数としてプログラム内の変数を受け渡し


Download ppt "Bottle/Pythonによる Webアプリ入門"

Similar presentations


Ads by Google