Examples¶
examples/は、ひとつの概念を小さく実行できるようテーマ別に分かれています。
| File | 内容 | 実行時の注意 |
|---|---|---|
app.py |
routing、JSON、SSR template | なし |
blueprint_hooks.py |
Blueprint、config、request/lifecycle hook | なし |
routing_async.py |
converter、複数method、async handler | なし |
modern_typed_api.py |
Annotated入力、DI、response model、OpenAPI | なし |
class_based_views.py |
ViewとMethodView | なし |
streaming_sse.py |
sync stream、async SSE、background task | SSEは3秒後に終了 |
lifespan_background.py |
async lifespan、app.state、background task | なし |
responses_cookies_files.py |
response型、cookie、file download | repository内のtemplateを配信 |
websocket_chat.py |
JSON WebSocket echo | WebSocket clientが必要 |
multipart_upload.py |
安全なfile uploadと保存 | request時にuploads/へ作成 |
mounted_apps.py |
WSGI / ASGI mount | HTTP scopeのみ |
openapi_api.py |
従来形式のdataclassとOpenAPI metadata | metadataのみの形式 |
orm_blog.py |
SQLite ORM CRUD | 起動時にblog.sqlite3を作成 |
orm_fields.py |
全ORM field、query、save | in-memory SQLiteのみ |
authentication.py |
login、CSRF、password、session | secret環境変数が必要 |
security_tokens_roles.py |
signed token、role、permission | secret環境変数が必要 |
oauth_login.py |
Google OAuth + PKCE/state | credentialsと外部通信が必要 |
security_hardened.py |
CORS、host、header、proxy、rate limit | proxy trustを環境に合わせる |
testing_client.py |
JSON、cookie jar、multipartのtest | serverを起動せずassertを実行 |
supervised_app.py |
multi-process Supervisor | workerからpeerはloopbackに見える |
基本の実行¶
repository rootからeditable installした後に実行します。
python -m pip install -e .
python examples/routing_async.py
python examples/modern_typed_api.py
python examples/streaming_sse.py
python examples/testing_client.py
factory形式の例はCLIからも起動できます。
higuma run examples.orm_blog:create_app --port 8000
higuma run examples.blueprint_hooks:create_app --port 8000
higuma run examples.supervised_app:app --processes 4
secretを使う例¶
32バイト以上のランダムな値を開発用に設定してください。実際のsecretをshell historyや repositoryへ保存しないでください。
CSRF付きloginでは、まずGET /csrfで同じclient sessionにtokenを作り、その値を
X-CSRF-Token headerまたは_csrf_token form fieldとしてPOST /loginへ送ります。
OAuth例では追加でGOOGLE_CLIENT_IDとGOOGLE_CLIENT_SECRETが必要です。
redirect URIをprovider側にも正確に登録してください。例は実際にGoogleへ通信します。
fileを作る例¶
multipart_upload.pyの既定保存先はexamples/uploads/です。
HIGUMA_UPLOAD_DIRで専用ディレクトリへ変更できます。例はfilenameを正規化し、
2 MiBと許可拡張子を検査しますが、本番では内容検査、malware scan、認可、quota、
object storageも追加してください。
orm_blog.pyはexamples/blog.sqlite3を作ります。副作用なくORMを試す場合は
in-memory SQLiteを使うorm_fields.pyを実行してください。
Supervisorの本番構成はデプロイを参照してください。Supervisorを 直接公開した場合、client IPベースのrate limitや監査ログは利用できません。