当社はIT技術のオンライン教育を得意としたセミナー専門会社です。 | 一戸英男

ITエンジニアの技術力UPをお約束します。

Python3 Bottleフレームワーク入門(その9)- Json

Python3 Bottleフレームワーク入門(その9)- Json


Bottleに限ったjsonの返却の仕方という訳ではないが、特定URLを叩いた時のjson返却方法を試してみる。REST APIのようなものを作る時の基礎として掲載する。

※http://xxx.xxx.xxx.xxx/api/v1.0/tasks で実験。

※http://xxx.xxx.xxx.xxx/json/1/2/3/pathfindで実験。

合わせて読みたいJson記事

FORM入力をJSONでサーバへ送出する仕組みの基本的な例(Vue.jsを使った場合)



Python Bottle Framework入門 全13回
1.基礎編サーバ起動
2.リクエストメソッド
3.ORM Peewee (MySQL)
4.ORM Peewee CRUD
5.Cookie And Session
6.Abort and Redirect
7.マルチスレッドWEBサーバ
8.デーモン化
9.Json
10.WSGI on SSL
11.Apache連携起動(外部WSGI) SSL接続
12.Apache連携起動(ReverseProxy)SSL接続
13.hprox連携起動(ReverseProxy)SSL接続&HTTP2対応

合わせて読みたいPython MySQL操作関連

タグ: , , ,

Python3 Bottleフレームワーク入門(その8)- デーモン化


Bottleはコマンドラインで起動すると終了でCTRL+Cを入れるまでコマンドプロンプトが戻ってきません。これでは不便と考えるなら自前でデーモン化してみましょう。最近ではBottleDaemonというモジュールもありますがオリジナルで色々開発しているとそのままではBottleDaemonが使えないケースが多いです。そんなときは自前でデーモン化処理を作ってしまいましょう。それほど難しいものではありません。

◯ デーモンの起動と停止

◯ 起動プログラム

◯ 停止プログラム



Python Bottle Framework入門 全13回
1.基礎編サーバ起動
2.リクエストメソッド
3.ORM Peewee (MySQL)
4.ORM Peewee CRUD
5.Cookie And Session
6.Abort and Redirect
7.マルチスレッドWEBサーバ
8.デーモン化
9.Json
10.WSGI on SSL
11.Apache連携起動(外部WSGI) SSL接続
12.Apache連携起動(ReverseProxy)SSL接続
13.hprox連携起動(ReverseProxy)SSL接続&HTTP2対応

合わせて読みたいPython MySQL操作関連

タグ: , , ,

Python3 Bottleフレームワーク入門(その7)- マルチスレッドWEBサーバ(Paste,Rocket)


今回の記事ではBottleのWEBサーバについて解説していきたいと思います。Bottleの標準で用意されているWEBサーバはシングルスレッドのWSGIサーバ(wsgirefサーバ)です。Bottleに限らずほとんどの様々な言語のフレームワークはテスト用にシングルスレッドのWEBサーバが用意されています。あくまでも開発中に作ったものを確認するために用意されたものです。しかし、マルチスレッドでもう少し挙動を確認したい場合もあるはずです。やはりシングルとマルチではプログラムの作り方が根本的に違います。また、pythonで作ったWEBサーバに関してセキュリティ攻撃や機能的に心もとないと思うならリバースプロキシーWEBサーバでApache連携すれば良いですが、その場合はPythonコンテンツ側はマルチスレッドである必要があります。故にマルチスレッドでの動作ができる内部連携するWSGI WEBサーバをご紹介したいと思います。

マルチスレッドpasteモジュール

Bottleをマルチスレッドで動作させるモジュールは色々ありますが古くからあり使いやすいのがpasteモジュールです。今回はpasteモジュールのインプリメントを見ていきましょう。
※2023/03/8 にPasteWebサーバの設定方法を刷新しました。ログ出力も対応しています。画面とファィルに出力されます。後半のRocketServerは既に古くてpython3.6以前でないと動作しないと思います。

pasteモジュールの導入

まず最初にpasteモジュールを導入します。

簡単なマルチスレッド起動のコーディングを書く

makoテンプレートエンジンを使っていますので、テンプレートはPython3 Bottleフレームワーク入門(その1)で紹介しているものをそのまま使ってください。

負荷テスト

nperfを使って負荷テストをしてみましょう。-cが並行スレッド数で-nがテストの回数です。

◯ nperfのインストール



Rocketを使ったマルチスレッド対応

最近使った感じではこちらのRocketの方がpasteより良い感じ。pasteはPython2.7からPython3.xの対応が中途半端でエラーを吐くことがあるのでメンテがいまいち。Rocketも最新バージョンがバグがありエラーとなるのでpipから導入したものは起動エラーが生じ動作に至りませんでした。まともに動くForkしたバージョン(1.2.4)で利用すると良いです。

Rocketサーバのインストールとロギング機能の設置

Rocketを使ったマルチスレッドサーバ(server.py)のソースコード

ログ出力の機能を加えました。Apacheのログ形式で実行ディレクトリ上のrocket.logに吐き出されます。
ちなみにport番号の後にサーバ証明書、プライベート鍵を記述するとHTTPS対応になりますので是非トライしてみてください。
Apacheサーバでリバースプロキシー連携するならSSLはApache側に持たせたほうが絶対に良いです。理由は細かいSSLオプション関連の制御ができるからです。

サーバの実行



Python Bottle Framework入門 全13回
1.基礎編サーバ起動
2.リクエストメソッド
3.ORM Peewee (MySQL)
4.ORM Peewee CRUD
5.Cookie And Session
6.Abort and Redirect
7.マルチスレッドWEBサーバ
8.デーモン化
9.Json
10.WSGI on SSL
11.Apache連携起動(外部WSGI) SSL接続
12.Apache連携起動(ReverseProxy)SSL接続
13.hprox連携起動(ReverseProxy)SSL接続&HTTP2対応

合わせて読みたいPython MySQL操作関連

タグ: , , ,

Python3 Bottleフレームワーク入門(その6)- Abort and Redirect


本記事ではアボート処理とリダイレクトについて説明する。abortの出番はWEB上のコンテンツを作る上では重要である。よくあるのはアクセス禁止、ファイルが存在しないケースだろう。特に後者はCMSの世界ではソフトウェア404を使うケースが多い。でもグーグルがソフトウェア404だと正しく認識してくれないため検索インデックスに該当ファイルが無いという認識が持てず古いインデックスを更新しません。結果的に悪い評価になってしまうことがあります。このような場合はabort関数を使用してハードウェア404を返してあげるとベターです。

アボート処理

アボート処理はWEB上で異常を示すエラーコードと共に使用するものです。

リダイレクト処理

リダイレクト処理は何らかの理由があって、最初のURLから別のURLへ転送します。

※この2つの関数redirect(),abort()は必ず実行するとException Errorを起こしますが気にする必要はありません。使うと発生するそのようなものと解釈してください。元々そのような仕様で作られています。つまり何らかの異常を示す際に使う関数であるからと理解するとわかり易いかもしれません。エラーを抑制したい場合はBottleのconfigでcatchallをFalseに設定することで止めることができます。



Python Bottle Framework入門 全13回
1.基礎編サーバ起動
2.リクエストメソッド
3.ORM Peewee (MySQL)
4.ORM Peewee CRUD
5.Cookie And Session
6.Abort and Redirect
7.マルチスレッドWEBサーバ
8.デーモン化
9.Json
10.WSGI on SSL
11.Apache連携起動(外部WSGI) SSL接続
12.Apache連携起動(ReverseProxy)SSL接続
13.hprox連携起動(ReverseProxy)SSL接続&HTTP2対応

合わせて読みたいPython MySQL操作関連

タグ: , , , ,

Python3 Bottleフレームワーク入門(その5)- Cookie And Session


本チャプターでは、クッキー、セッションまわりについて解説します。クッキーはご存じの通り一度来訪するとその時の行動でアクションした記録が残り次回の来訪時にその情報が適用されてWEB画面に反映される仕組みである。またセッションはログインしている状態を記録し、ページ遷移や次回のブラウザ起動時にログイン無しでページに入れる仕組みなどに使われます。



クッキーの仕組みは標準でBottleから利用できるため特に特殊なライブラリーを新規で導入することはありません。response関数で設置することができます。

クッキーの設定例

下記は、ブラウザーからhttp://xxx.xxx.xxx.xxx/counterを表示させリロードするとその度にカウンタ値があがるプログラムです。サーバを終了してもクッキーが残っているためまた起動してテストすると前回の値から加算されてゆきます。ブラウザをとじて再テストしても同様です。クッキーはブラウザー側に残っているためこのようになります。

クッキーの削除

今度はクッキーのリセット機能を追加しました。下記のようにクッキーのエイジングを0にしてカウンタ値も一旦空にします。これが事実上のクッキーの削除のようなものです。ブラウザーからhttp://xxx.xxx.xxx.xxx/resetを表示させ再度カウンター表示のページに飛ぶとカウンターが1からスタートしていることがわかります。

セッションの機能を使う

セッションの機能を使うにはBottleの場合、Beakerというモジュールを使うことができます。インストールはpipコマンドで 導入してください。

先程のクッキーのカウントアッププログラムと同じ要領でブラウザーからアクセスしてみてください。結果的にクッキーと同じような動作を確認できます。

セッションの削除の様々なパターン

一口に削除と言っても様々なパターンがある。値を初期化する。データを削除する。今のセッションを廃棄する。プログラムの流れ用途によってどれを使うか考えて使いましょう。



Python Bottle Framework入門 全13回
1.基礎編サーバ起動
2.リクエストメソッド
3.ORM Peewee (MySQL)
4.ORM Peewee CRUD
5.Cookie And Session
6.Abort and Redirect
7.マルチスレッドWEBサーバ
8.デーモン化
9.Json
10.WSGI on SSL
11.Apache連携起動(外部WSGI) SSL接続
12.Apache連携起動(ReverseProxy)SSL接続
13.hprox連携起動(ReverseProxy)SSL接続&HTTP2対応

合わせて読みたいPython MySQL操作関連

タグ: , , ,

1 2 3 4