序章

Pythonは、その柔軟性と高レベルの機能により、Webプログラミングに最適な言語です。 Webフレームワークは、堅牢なWebインターフェイスに必要なコンポーネントの多くを接続するため、Webアプリケーションのプログラミングをはるかに簡単にすることができます。

一部のWebフレームワークはすべてを提供しようとしますが、他のWebフレームワークは、実装が難しい重要な問題を処理しながら邪魔にならないようにします。 Bottle は、2番目のカテゴリに分類されるPythonフレームワークです。 非常に軽量ですが、アプリケーションの迅速な開発も容易になります。

このガイドでは、Bottleをセットアップして使用し、Ubuntu14.04サーバーで簡単なWebアプリケーションを作成する方法について説明します。

前提条件

このガイドを開始する前に、次のものが必要です。

  • Ubuntu14.04ドロップレット
  • コマンドラインからテキストファイルを編集する方法に関する実用的な知識
  • sudoユーザー

ステップ1—Python用の仮想環境をインストールする

Bottleが構築されているプログラミング言語であるPythonは、デフォルトでUbuntuにインストールされています。

インストールします python-virtualenv PythonプロジェクトをシステムのPython環境から分離するためのパッケージ。 virtualenvソフトウェアを使用すると、OS全体に影響を与えないPythonプロジェクト用の個別の包含環境を作成できます。

パッケージリストを更新します。

  1. sudo apt-get update

インストール python-virtualenv リポジトリから:

  1. sudo apt-get install python-virtualenv

作成します projects ホームディレクトリにフォルダを作成し、このフォルダ内に仮想環境を作成します。

  1. mkdir ~/projects
  2. cd ~/projects
  3. virtualenv --no-site-packages venv

これにより、というディレクトリが作成されます venv 以内 projects ディレクトリ。 このフォルダ内にいくつかのPythonユーティリティをインストールし、追加のツールをインストールするためのディレクトリ構造を作成しました。

ステップ2—Pythonの仮想環境をアクティブ化する

プロジェクトの作業を開始する前に、仮想環境をアクティブ化する必要があります。

  1. source venv/bin/activate

コマンドプロンプトは、現在仮想環境で操作しているという事実を反映して変化します。

後で再接続する必要がある場合は、次のコマンドを使用して環境を再度アクティブ化してください。

  1. cd ~/projects
  2. source venv/bin/activate

仮想環境を終了する必要がある場合は、いつでも次のように入力できます。

  1. deactivate

この時点では、仮想環境を非アクティブ化しないでください。

ステップ3—ボトルを取り付ける

virtualenvプログラムがインストールしたツールの1つは pip.

このツールを使用すると、オンラインリポジトリである Python PackageindexからPythonパッケージを簡単にインストールできます。

Bottleに関係するPythonパッケージを検索する場合は、次のコマンドを実行できます。

  1. pip search bottle

ボトルパッケージをインストールすることから始めます:

  1. pip install bottle

プロセスが完了すると、アプリケーション内でBottleフレームワークを使用できるようになります。

ステップ4—最初のボトルアプリケーションを作成する

ほとんどのフレームワークと同様に、BottleはMVCソフトウェアパターンのバージョンを実装します。 MVCは、モデル、ビュー、およびコントローラーの略であり、ユーザーインターフェイスのさまざまな機能を分離する決定を表します。

model はデータセットの表現であり、データの保存、クエリ、および更新を担当します。 ビューは、情報をユーザーに表示する方法を説明します。 これは、データの表示をフォーマットおよび制御するために使用されます。 コントローラーはアプリのメイン処理センターであり、ユーザーの要求に応答する方法を決定します。

ボトルの塗布は非常に簡単です。 最も裸の形では、これらすべてのコンポーネントを1つのファイルに実装できます。 これがどのように行われるかを示すために、「helloworld」アプリケーションを作成します。

お気に入りのテキストエディタを使用して、というPythonアプリケーションを作成します hello.py:

  1. nano ~/projects/hello.py

各行を1つずつ表示し、このセクションの最後に最終ファイルを含めます。

このファイル内で、追加する最初の行は、Bottleパッケージからいくつかの機能をインポートします。 これにより、アプリケーション内でフレームワークツールを使用できるようになります。

hello.py
from bottle import route, run

この行は、ルートをインポートして、Bottleパッケージからモジュールを実行することをプログラムに通知します。

  • The run インポートしているモジュールを使用して、開発サーバーでアプリケーションを実行できます。これは、プログラムの結果をすばやく確認するのに最適です。
  • The route インポートするモジュールは、どのURLリクエストがどのPython関数によって処理されるかをアプリケーションに通知する役割を果たします。 ボトルアプリケーションは、要求されたURLごとに単一のPython関数を呼び出すことによってルーティングを実装します。 次に、関数の結果をユーザーに返します

URLパターンに一致するルートを今すぐ追加できます /hello. ファイルの最後に新しい行を1つ追加します。

hello.py
from bottle import route, run

@route('/hello')

このルートデコレータはURLと一致します /helloそのため、サーバーでそのパスが要求されると、直接続く関数が実行されます。 ファイルの最後にさらに2行追加します。

hello.py
from bottle import route, run

@route('/hello')
def hello():
    return "<h1>Hello World!</h1>"

この関数は非常に単純ですが、ルーティング関数の唯一の要件を満たしています。Webブラウザーに表示できる値を返します。 この場合、値は単純なHTML文字列です。 h1ヘッダータグを削除すると、同じ情報が装飾されていない方法で表示されます。

最後に、開発サーバーを使用してアプリケーションを実行する必要があります。 最後の行を追加すると、ファイルが完成します。

hello.py
from bottle import route, run

@route('/hello')
def hello():
    return "<h1>Hello World!</h1>"

run(host='0.0.0.0', port=8080)

この行はサーバーインスタンスを実行します。

  • パラメータを渡すことによって host='0.0.0.0'、これにより、ローカルマシンだけでなく、任意のコンピューターにコンテンツが提供されます。 アプリケーションはリモートでホストされているため、これは重要です
  • The port パラメータは、これが使用するポートを指定します

ファイルを保存して閉じます。

このアプリケーションは、次のコマンドで実行できます。

  1. python ~/projects/hello.py

Webブラウザーでこのアプリケーションにアクセスするには、IPアドレス、実行するために選択したポート(8080)、作成したルート(/ hello)の順に移動します。

  • http://your_server_ip:8080/hello

次のようになります。

次のように入力すると、いつでもサーバーを停止できます。

  1. CTRL-C

ステップ5—ボトルモデルを作成する

これで、最初のアプリケーションが実装されました。 シンプルでしたが、MVCの原則を実際に実装したり、特に興味深いことをしたりすることはありませんでした。 今回はもう少し洗練されたアプリケーションを作成しましょう。

モデルから始めましょう。 これは、データストレージを処理するプログラムの一部です。 Bottleは、プラグインを使用して、データのさまざまなバックエンドを簡単に実装できます。

データベースにはSQLiteデータベースファイルを使用します。 これは、軽量タスク用に設計された非常にシンプルなデータベースです。

次のコマンドでSQLiteをインストールします。

  1. sudo apt-get install sqlite

また、これらのデータベースを使用できるようにするボトルプラグインをダウンロードしてインストールする必要があります。

  1. pip install bottle-sqlite

コンポーネントができたので、いくつかのデータを含むSQLiteデータベースを生成するPythonファイルを作成します。 Pythonインタープリターでこれを行うこともできますが、ファイルを作成すると簡単に繰り返すことができます。

ファイルを作成します。

  1. nano ~/projects/picnic_data.py

このコンテンツをファイルに追加します。 ピクニックインベントリアイテムで満たされたデータベースを作成します。

picnic_data.py
import sqlite3
db = sqlite3.connect('picnic.db')
db.execute("CREATE TABLE picnic (id INTEGER PRIMARY KEY, item CHAR(100) NOT NULL, quant INTEGER NOT NULL)")
db.execute("INSERT INTO picnic (item,quant) VALUES ('bread', 4)")
db.execute("INSERT INTO picnic (item,quant) VALUES ('cheese', 2)")
db.execute("INSERT INTO picnic (item,quant) VALUES ('grapes', 30)")
db.execute("INSERT INTO picnic (item,quant) VALUES ('cake', 1)")
db.execute("INSERT INTO picnic (item,quant) VALUES ('soda', 4)")
db.commit()

このファイルでは、次のことを行います。

  • SQLiteパッケージをインポートします
  • テーブルを作成してデータを挿入するコマンドを実行します
  • 最後に、変更をコミットします

ファイルを保存して閉じます。

ファイルを実行すると、というデータベースファイルが作成されます。 picnic.db 現在のディレクトリ内:

  1. python ~/projects/picnic_data.py

必要に応じて、 ls データベースファイルが作成されたことを確認するディレクトリ。

これで、プログラムのモデル部分はかなり完成しました。 モデルは、データと相互作用するために制御部分がどのように機能する必要があるかを少し指示することがわかります。

6 —ボトルコントローラーを作成する

データベースができたので、メインアプリケーションの開発を開始できます。 これは主にコントローラー機能を実装します。 これは、最初のアプリケーションに最もよく似たファイルにもなります。

というファイルを作成します picnic.py メインアプリケーションを保存するには:

  1. nano ~/projects/picnic.py

前と同じように、ファイルを1行ずつ説明し、ステップの最後に完成したファイルを表示します。

このファイル内で、以前と同じように、Bottleパッケージからいくつかのものをインポートする必要があります。 これまで使用したことのない追加のモジュールが必要です。 さらに、SQLite機能をインポートする必要があります。

picnic.py
import sqlite3
from bottle import route, run, template

次に、URLパスに一致するルートを定義します /picnic:

picnic.py
import sqlite3
from bottle import route, run, template

@route('/picnic')

データベースに接続し、テーブルからデータを取得し、ビューを呼び出してページをレンダリングする関数を実装します。

picnic.py
import sqlite3
from bottle import route, run, template

@route('/picnic')
def show_picnic():
    db = sqlite3.connect('picnic.db')
    c = db.cursor()
    c.execute("SELECT item,quant FROM picnic")
    data = c.fetchall()
    c.close()
    output = template('bring_to_picnic', rows=data)
    return output
  • データベースに接続するコマンドは db = sqlite3.connect('picnic.db') 指図
  • データベースにクエリを実行し、次の4行ですべての値を選択します
  • データをフォーマットするためにビューを呼び出す行は次のとおりです。 output = template('bring_to_picnic', rows=data). これは、と呼ばれるテンプレート(ビュー)を呼び出します bring_to_picnic.tpl データをフォーマットします。 合格します data テンプレート変数としての変数 rows
  • 最後に、フォーマットされた出力をユーザーに返します

最後に、 run 実際のサーバーを実行するコマンド:

picnic.py
import sqlite3
from bottle import route, run, template

@route('/picnic')
def show_picnic():
    db = sqlite3.connect('picnic.db')
    c = db.cursor()
    c.execute("SELECT item,quant FROM picnic")
    data = c.fetchall()
    c.close()
    output = template('bring_to_picnic', rows=data)
    return output

run(host='0.0.0.0', port=8080)

ファイルを保存して閉じます。

このテンプレートファイルを作成します bring_to_picnic.tpl 次のセクションで。

ステップ7—ボトルビューを作成する

モデルとコントローラーができたので、作成する必要があるのはビューだけです。 これは、Bottleの組み込みテンプレートエンジンを使用して簡単に処理できます。

アプリケーションは、テンプレート関数で指定された名前に一致するテンプレートを検索します。 .tpl. これは、プロジェクトのメインディレクトリ、またはと呼ばれるディレクトリのいずれかにあります。 view.

のテンプレート関数で呼び出したファイルと一致するファイルを作成します output 前のスクリプトの行:

  1. nano ~/projects/bring_to_picnic.tpl

このファイルでは、HTMLとプログラミングを組み合わせることができます。 私たちのものは非常にシンプルになります。 ループを使用してテーブルを作成し、モデルデータを入力します。 次のすべての行をファイルに追加します。

bring_to_picnic.tpl
<h1>Things to bring to our picnic</h1>

<table>
    <tbody>
        <tr><th>Item</th><th>Quantity</th></tr>
        %for row in rows:
        <tr>
        %for col in row:
            <td>{{col}}</td>
        %end
        </tr>
    %end
    <tbody>
</table>

これにより、ページがHTMLでレンダリングされます。

  • ここに表示されるテンプレート言語は基本的にPythonです
  • The rows テンプレートに渡した変数は、出力を設計するときに使用できます
  • Pythonの行を前に付けることで入力できます %
  • HTML内の変数にアクセスするには、 {{var}} 構文。

ファイルを保存して閉じます。

ステップ8—ボトルアプリケーションを開始します

これで申請は完了です。

メインファイルでPythonを呼び出すことで、プログラムを開始できます。

  1. python ~/projects/picnic.py

IPアドレスとポートにアクセスし、次に作成したURLルートにアクセスすると、結果を確認できます。

  • http://your_server_ip:8080/picnic

Webページは次のようになります。

プレス CTRL-C アプリケーションを停止します。 (CTRL-Z より強力な停止信号です。)

(オプション)ステップ9 —独自のアプリケーションをアップロードする

独自のBottleアプリケーションをアップロードするには、すべてのプロジェクトファイルを次のディレクトリにコピーする必要があります。

~/projects/

例えば:

  1. scp myproject.py [email protected]_server_ip:~/projects/

同様の方法で、このプロジェクトに関連付けられているすべてのファイルをアップロードします。 SFTP は、ファイルをアップロードする別の方法です。 scp.

(オプション)ステップ10 —独自のアプリケーションを開始します

仮想環境をアクティブ化します(まだアクティブ化していない場合)。

  1. cd ~/projects/
  2. source venv/bin/activate

を使用します python アプリケーションを起動するコマンド。 バックグラウンドでプロセスを開始することで、基本的な作業を少し減らします。つまり、端末を閉じることができ、アプリは引き続き実行されます。

  1. nohup python ~/projects/myproject.py &

出力には、プロセスID番号と次のメッセージが表示されます。

出力
[1] 20301
(venv)[[email protected] projects]$ nohup: ignoring input and appending output to ‘nohup.out’

本番環境の準備ができたら、アプリのより堅牢なスタートアッププランを作成することを強くお勧めします。 (バックグラウンドで起動するだけで、サーバーの再起動後にアプリが停止します。)Ubuntu14.04はUpstartを使用します。

結論

これで、Bottleのようなシンプルで必要最低限のマイクロフレームワークを使用して複雑なアプリケーションを構築する方法を理解できるはずです。 私たちの例は単純ですが、より高度な機能を利用するのは簡単です。

ボトルのプラグインシステムも重要な資産です。 プラグインはコミュニティ内で積極的に共有されており、プラグインシステムを介してより複雑な動作を簡単に実装できます。

たとえば、Bottle互換のプラグインを見つける簡単な方法の1つは、 pip search bottle 指図。 これにより、より人気のあるオプションのいくつかがわかります。