FastAPIによるWebアプリケーション構築

FastAPIはPythonのモダンなWebフレームワークで、ASGIベースの非同期処理をネイティブにサポートすることで、従来のWSGIベースフレームワークと比較して優れたパフォーマンスを実現します。Python 3.6以上の環境が必要です。 環境構築と最小構成 必要なパッケージをインストールします。 pip install fastapi pip install uvicorn[standard] シンプルなAPIサーバを構築 ...

8月13日 22:25 投稿

Python Flask における Jinja2 SSTI 脆弱性の機構と攻撃手法

Python Flask における Jinja2 SSTI 脆弱性の機構と攻撃手法 Web セキュリティの競技領域や実務审计において、Python 製の Web アプリケーション、特に Flask フレームワークで Jinja2 テンプレートエンジンを使用する際、サーバーサイドテンプレートインジェクション(SSTI)のリスクが存在します。本稿では、この脆弱性の発生要因から検出方法、悪用手法、そして回避策ま ...

8月2日 03:22 投稿

Flaskフレームワーク:リクエストとレスポンス & テンプレート構文

Flaskフレームワーク:リクエストとレスポンス & テンプレート構文 Flaskフレームワークの基本 FlaskはPythonで書かれた軽量級のカスタマイズ可能なフレームワークです。他の同種のフレームワークと比較して、より柔軟、軽量、安全で学習が容易です。 MVCパターンと良好に連携して開発でき、開発者間での協力が可能です。小規模なチームでも短期間で機能豊富な中小規模のW ...

7月22日 01:31 投稿

Djangoフレームワーク入門:基本概念とプロジェクト構築

ウェブフレームワークとDjangoの基本概念 ソフトウェア開発におけるクライアント/サーバー(C/S)アーキテクチャは、現代のウェブアプリケーション開発の基盤です。HTTPプロトコルとSQL言語の発展により、統一されたインターフェースと標準が確立されました。 HTTPプロトコルの基礎 HTTPの四大特性 TCP/IPプロトコルに基づき、アプリケーション層で動作す ...

7月6日 00:01 投稿

Jinja2テンプレート入門:ネットワーク設定の自動化を加速させる

なぜテンプレートエンジンが必要なのか? 従来のネットワーク運用では、エンジニアは異なるデバイスに対して類似したが少し異なる設定ファイルを手作業で作成する必要がありました。例えば、10台のルータに同じBGPピアリング構成を適用する場合、ピアリングのIPアドレスとAS番号が異なるだけで、10個の設定ファイルを手動で編集する必要がありました。これは時間がかかり、 ...

6月27日 22:34 投稿

HTML形式のテストレポート生成ツールの自作方法

unittestフレームワークを使用する際、HTML形式のレポートを生成するために`HTMLRunnerCN.py`をダウンロードすることが多いです。しかし、自分でHTMLRunnerを作成することも可能です。 HTMLRunnerはunittestのTextTestRunner()を模倣して作成されます。まずはTextTestRunner()の動作フローを見てみましょう。 TextTestRunnerの使用方法 import unittest suite = unitte ...

6月19日 23:26 投稿

Jinja2テンプレートにおけるフィルターの活用方法

フィルターとは何か Jinja2テンプレートエンジンでは、フィルターは変数の表示形式を加工・変換するための機能です。パイプ記号(|)を使って変数に適用され、オプションの引数も括弧で渡すことができます。複数のフィルターを連鎖させることも可能です。 組み込みフィルターの使用例 たとえば、文字列の長さを取得するには次のように記述します: {{ user.name|length }} ...

6月1日 19:43 投稿

Python Web開発入門:WSGI、Djangoインストール、主要フレームワーク比較

シンプルなWebサーバーの実装 以下は、socketモジュールを用いてHTTPリクエストを処理する最小限のWebサーバーの例です。 import socket sock = socket.socket() sock.bind(('127.0.0.1', 8080)) sock.listen(5) conn, addr = sock.accept() raw_data = conn.recv(1024).decode('utf-8') path = raw_data.split('\r\n')[0].split(' ')[1] conn.send(b'HTTP/1.1 200 OK\ ...

5月19日 15:33 投稿