ステータス:非推奨

この記事では、サポートされなくなったバージョンのUbuntuについて説明します。 現在Ubuntu12.04を実行しているサーバーを運用している場合は、サポートされているバージョンのUbuntuにアップグレードまたは移行することを強くお勧めします。

理由:
Ubuntu 12.04は2017年4月28日に保守終了(EOL)に達しました and no longer receives security patches or updates. This guide is no longer maintained.

代わりに参照してください:このガイドは参照として役立つ場合がありますが、他のUbuntuリリースでは機能しない場合があります。 可能な場合は、使用しているUbuntuのバージョン用に作成されたガイドを使用することを強くお勧めします。 ページ上部の検索機能を使用して、より新しいバージョンを見つけることができます。

序章

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

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

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

ボトルの取り付け方法


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

仮想環境のインストールとアクティブ化

virtualenvパッケージをインストールして、PythonプロジェクトをシステムのPython環境から分離します。

これはリポジトリから簡単にインストールできます。

sudo apt-get update
sudo apt-get install python-virtualenv

virtualenvソフトウェアを使用すると、OS全体に影響を与えないPythonプロジェクト用の個別の包含環境を作成できます。 ホームディレクトリにプロジェクトフォルダを作成してから、このフォルダ内に仮想環境を作成します。

mkdir ~/projects
cd ~/projects
virtualenv --no-site-packages venv

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

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

source venv/bin/activate

コマンドプロンプトは、現在仮想環境で操作しているという事実を反映して変更されます。 仮想環境を終了する必要がある場合は、いつでも次のように入力できます。

deactivate

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

ボトルをインストールします


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

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

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

pip search bottle

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

pip install bottle

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

最初のボトルアプリケーションを作成する


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

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

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

エディターを使用して、hello.pyというPythonアプリケーションを作成します。

nano hello.py

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

from bottle import route, run

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

インポートしている実行モジュールを使用して、開発サーバーでアプリケーションを実行できます。これは、プログラムの結果をすばやく確認するのに最適です。

インポートするルートモジュールは、どのURLリクエストがどのPython関数によって処理されるかをアプリケーションに通知する役割を果たします。 ボトルアプリケーションは、要求されたURLごとに単一のPython関数を呼び出すことによってルーティングを実装します。 次に、関数の結果をユーザーに返します。

URLパターン/helloに一致するルートを今すぐ追加できます。

from bottle import route, run

@route('/hello')

このルートデコレータは、サーバーでそのパスが要求されたときにURL/helloと一致します。 これが一致すると、直後の関数が実行されます。

from bottle import route, run

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

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

最後に、開発サーバーを使用してアプリケーションを実行する必要があります。

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

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

次のように入力すると、このアプリケーションを実行できます。

python hello.py

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

http:// your_ip :8080 / hello

DigitalOcean Bottle hello world

ターミナルウィンドウで「CTRL-C」と入力すると、いつでもサーバーを停止できます。

MVC設計パラダイムを実装する


これで、最初のアプリケーションが実装されました。 確かに単純でしたが、MVCの原則を実際に実装したり、特に興味深いことをしたりすることはありません。 今回はもっと複雑なアプリケーションを作ってみましょう。

モデルを作成する


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

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

UbuntuにSQLiteソフトウェアをインストールして、これらのデータベースを作成および操作するためのソフトウェアが利用可能であることを確認します。

sudo apt-get install sqlite

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

pip install bottle-sqlite

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

nano picnic_data.py

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

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()

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

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

python picnic_data.py

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

コントローラを作成する


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

picnic.pyというファイルを作成して、メインアプリケーションを保存します。

nano picnic.py

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

import sqlite3
from bottle import route, run, template

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

import sqlite3
from bottle import route, run, template

@route('/picnic')

データベースに接続し、テーブルからデータを取得し、「ビュー」を呼び出してページをレンダリングする関数を実装します。 最後に、ユーザーへのフォーマットされた出力に戻ります。

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コマンドを配置する必要があります。

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)

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

db = sqlite3.connect('picnic.db')コマンドでデータベースに接続します。 データベースにクエリを実行し、次の4行ですべての値を選択します。

データをフォーマットするために「ビュー」と呼ぶ行はoutput = template('bring_to_picnic', rows=data)です。 これにより、bring_to_picnic.tplというテンプレート(ビュー)が呼び出され、データがフォーマットされます。 「data」変数をテンプレート変数「rows」として渡します。

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

ビューを作成する


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

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

テンプレート関数で呼び出したファイルと一致するファイルを作成します。

nano bring_to_picnic.tpl

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

<h1>Things to bring to our picnic</h1>
<table>
<tr><th>Item</th><th>Quantity</th></tr>
%for row in rows:
    <tr>
    %for col in row:
        <td>{{col}}</td>
    %end
    </tr>
%end
</table>

これにより、ページがHTMLでレンダリングされます。 ここに表示されるテンプレート言語は基本的にPythonです。 テンプレートに渡した「rows」変数は、出力を設計するときに使用できます。

Pythonの行の前に「%」を付けると、Pythonの行を入力できます。 「{{var}}」構文を使用して、HTML内の変数にアクセスできます。

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

結果の表示


これでアプリケーションが完成し、メインファイルでPythonを呼び出すことでプログラムを開始できます。

python picnic.py

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

http:// your_ip :8080 / picnic

DigitalOcean Bottle mvc example

結論


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

ボトルのプラグインシステムも重要な資産です。 プラグインはコミュニティ内で積極的に共有されており、プラグインシステムを介してより複雑な動作を簡単に実装できます。 プラグインを見つける簡単な方法の1つは、pip search bottleコマンドを使用することです。 これにより、より人気のあるオプションのいくつかがわかります。

ジャスティン・エリングウッド