たけし備忘録

自分の好奇心の赴くままに勉強メモ LL系が大好き Python bash Julia C

8.開発

開発

基礎を学び、独自のアプリケーションを書きたいかと思った時?あなたがより生産的に、役立つかもしれないいくつかのヒントはここにある。


デフォルトのアプリケーション

ボトルはボトルインスタンスのグローバル·スタックを維持し、モジュールレベルの関数やデコレータのいくつかの既定値としてスタックの一番上を使用しています。ルート()デコレータは、例えば、デフォルトのアプリケーションにBottle.route()を呼び出すためのショートカットです。

@route('/')
def hello():
    return 'Hello World'

この小さなアプリケーションのために非常に便利で、あなたにいくつかの入力を保存しますが、また、モジュールがインポートされるとすぐに、ルートがグローバルなアプリケーションにインストールされている、ことを意味します。インポートこの種の副作用を避けるために、ボトルには、アプリケーションを構築するための第二に、より明示的な方法を提供しています。

app = Bottle()
@app.route('/')
def hello():
    return 'Hello World'

アプリケーションオブジェクトを分離することも、再利用性、多くを向上させます。他の開発者が安全にモジュールからアプリケーションオブジェクトをインポートして、一緒にアプリケーションをマージするBottle.mount()を使用することができます。
代替手段として、あなたはまだ便利なショートカットを使用している間に経路を分離するためにアプリケーション·スタックの使用を行うことができます。

default_app.push()
@route('/')
def hello():
    return 'Hello World'
app = default_app.pop()

アプリ()とdefault_app()の両方がAppStackのインスタンスであるとスタックのようなAPIを実装しています。あなたから、必要に応じてスタックにプッシュアプ​​リケーションとポップすることができます。あなたが別のアプリケーションオブジェクトを提供していないサードパーティ製のモジュールをインポートしたい場合にも役立ちます。

default_app.push()
import some.module
app = default_app.pop()



モードのデバッグ

初期の開発中に、デバッグモードでは、非常に役立つことがあります。

bottle.debug(True)

このモードでは、ボトルははるかに冗長であり、エラーが発生するたびに有用なデバッグ情報を提供します。それはまたあなたの邪魔になるかもしれないいくつかの最適化を無効にし、可能な限り設定ミスについて警告をいくつかのチェックを追加します。
ここで、デバッグモードで変更するものの不完全なリストは、次のとおりです。
デフォルトのエラーページでは、トレースを示しています。
テンプレートはキャッシュされません。
プラグインはすぐに適用されます。
ただ本番サーバー上でデバッグモードを使用しないことを確認してください。


リロードオート

開発中に、あなたの最近の変更をテストするためにサーバーをたくさん起動する必要があります。自動リロード機能はあなたのためにこれを行うことができます。あなたは、モジュールファイルを編集するたびに、リロード機能·サーバー·プロセスが再起動し、コードの最新バージョンをロードします。

from bottle import run
run(reloader=True)

どのように動作します:メインプロセスはサーバを起動するが、メインプロセスを開始するために使用されているのと同じコマンドライン引数を使用して、新しい子プロセスを生成しません。すべてのモジュールレベルのコードは、少なくとも二回実行されます!注意してください。
子プロセスはos.environ BOTTLE_CHILD?がtrueに設定されていると通常の非リロードアプリケーションサーバとして起動します。すぐにロードされたモジュールの変更のいずれかと同様に、子プロセスは終了し、メイン·プロセスによって再生成された。テンプレートファイルの変更は、リロードをトリガしません。テンプレートキャッシュを無効にするデバッグモードを使用してください。
リロードは、子プロセスを停止する能力に依存している。あなたがsignal.SIGINTをサポートしていないWindowsまたは他のオペレーティングシステムPythonでとKeyboardInterruptが発生している)上で実行されている場合、signal.SIGTERMは子を殺すために使用されています。終了ハンドラやfinally節などは、SIGTERM後に実行されないことに注意してください。


コマンドラインインタフェース

バージョン0.10以降では、コマンドラインツールとしてボトルを使用することができます。

$ python -m bottle
Usage: bottle.py [options] package.module:app
Options:
-h, --help show this help message and exit
--version show version number.
-b ADDRESS, --bind=ADDRESS
bind socket to ADDRESS.
-s SERVER, --server=SERVER
use SERVER as backend.
-p PLUGIN, --plugin=PLUGIN
install additional plugin/s.
--debug start server in debug mode.
--reload auto-reload on file changes.

localhostにポートのペアとデフォルト値:8080 Addressフィールドは、IPアドレスまたはIPアドレスを取ります。他のパラメータは自己説明的であるべきです。
プラグインとアプリケーションの両方がインポート式を介して指定されています。これらは、コロンで区切られ、そのモジュールの名前空間に評価するのimportパス(例えばpackage.module)および式から構成されています。詳細については、load()を参照してください。ここではいくつかの例は、次のとおりです。

# Grab the 'app' object from the 'myapp.controller' module and
# start a paste server on port 80 on all interfaces.
python -m bottle -server paste -bind 0.0.0.0:80 myapp.controller:app
# Start a self-reloading development server and serve the global
# default application. The routes are defined in 'test.py'
python -m bottle --debug --reload test
# Install a custom debug plugin with some parameters
python -m bottle --debug --reload --plugin 'utils:DebugPlugin(exc=True)'' test
# Serve an application that is created with 'myapp.controller.make_app()'
# on demand.
python -m bottle 'myapp.controller:make_app()''



次の記事へ進む → 9.展開と用語集


関連リンク