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
© Copyright 2025 ExpyDoc