軽量のPython Webフレームワーク:ボトル

はじめに



最近、Habrには優れたボトルフレームワークに関する記事が1つもありませんが、偶然にもかなりの人が使用していることに気付いたので、この記事ではそれについてお話します。



設置



Bottleは非常に軽量なフレームワークであり、bottle.pyという1つのファイルに収まります。 ここからインストールするか、pip install bottleを作成します。



特徴



ミニマリズムにも関わらず、Bottleは非常に多くの機会を提供しており、中小規模のプロジェクトには10​​0%十分です。 主な機能のリストは次のとおりです。



ルーティング


ほとんどのpythonフレームワークのように、ボトル内のルーティングはデコレーターを使用して行われます。 例:

@route('/hello/<name>') def index(name): return name
      
      





正規表現に基づいて動的なURLを作成することもできます。

 @route('/news/<number:re:[0-9]*>') def show_news(number): pass
      
      





テンプレート


フレームワークの強みの1つはテンプレートエンジンです。 テンプレートエンジンを使用するには、次のような軽量の構造を記述するだけです。

 template('template_name', name=name, number=number, foo=bar)
      
      





関数の最初の引数は、テンプレートテキストを含むファイルの名前です(この場合、テンプレートはtemplate_name.tplと呼ばれます)。

ファイル自体に、変数の名前を中括弧2つで記述する必要があります。

 Hello, {{name}}, glad to see you!
      
      





デフォルトでは、HTMLコードが括弧で示されている場合、XSS攻撃を回避するために実行されないように作成されています。 これが本当に必要な場合は、{{!Name}}と書くことができます。 Bottleは非常に優れた機能も提供します。テンプレート内にPythonコードを記述します。 pythonを呼び出すには、行の先頭に%を入れるだけです。 例:

 %a = 100500 %for i in xrange(a): <div class="image_{{i}}"><img src="......{{i}}.jpg"></div> %end
      
      





テンプレートからテンプレートを含めることもできます。これにより、テンプレートを美しくきれいに含めることができます。

 %include template_num2 foo=bar, blabla=qweqwe
      
      





POSTルーティングとフォーム処理


フォームの後続の処理でPOST要求を処理する機能がない場合、どのような通常のフレームワークが存在できますか?

POSTリクエストを処理するためのメカニズムはGETリクエストを処理するためのメカニズムとまったく同じで、ルートという単語をpostに置き換えるだけです。

 @post("/url") def foo(): pass
      
      





フォームにアクセスするには、「名前」フィールドの属性が使用されます。 例:

 <input name="age" placeholder="">
      
      





フォームの内容を取得するには、次の構成を使用する必要があります。

 request.forms.get("age") #     age request.forms.getall("age") #     age
      
      





ファイルを処理することもできます:

 request.files.get("picture") #      picture request.files.getall("picture") #      (mult-upload)
      
      





クッキー


ボトル内のCookieの処理は、Cookieの設定が非常に簡単です。

 response.set_cookie("name", value, max_age=100500)
      
      





値を取得するには:

 request.get_cookie("name")
      
      





サーバー


単純なhttpサーバーがボトルに縫い付けられていますが、これは1ページの非常に迅速なテストにのみ適しています。

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





当然、大規模なプロジェクトに使用することは不可能なので、ボトルを何らかの方法でapacheまたはnginxに関連付ける必要があります。 正直なところ、私は常に自分自身でa​​pacheを使用しているので、それについて話すことしかできませんが、ngninxではすべてが非常に簡単です。 Bottleはmod_wsgiを介してApacheと通信します。 これを実装するには、次を実行する必要があります。

  1. このコンテンツでadapter.wsgiファイルを作成します
    ネタバレ
     import sys, os, bottle sys.path.append(os.path.dirname(os.path.abspath(__file__))) os.chdir(os.path.dirname(os.path.abspath(__file__))) import index #   application = bottle.default_app()
          
          





  2. mod_wsgiをインストールして有効にします
  3. 仮想ホスト設定を追加
    ネタバレ
     <VirtualHost *:80> DocumentRoot /var/www/foo </VirtualHost> <Directory /var/www/foo> Options FollowSymLinks ExecCGI AddHandler wsgi-script .wsgi Order allow,deny AllowOverride All Allow from all </Directory>
          
          









よくある間違いとその解決策





おわりに



当然、フレームワークに関するすべての情報を1つの投稿に収めることは困難です。最も重要なことだけを書きました。 幸いなことに、ボトルにはかなり良いドキュメントがありますので、読んでください。 良い週末を!



All Articles