为ASGI应用程序提供的HTMX集成。
项目描述
asgi-htmx
HTMX 为 ASGI 应用程序提供的集成。适用于 Starlette、FastAPI、Quart - 或任何其他支持ASGI并公开ASGI scope的Web框架。受 django-htmx 启发。
目录
安装
注意:这是alpha软件。请确保固定您的依赖关系。
pip install asgi-htmx==0.1.*
快速入门
首先,确保 HTMX已安装。
例如,下载一份 htmx.min.js 的副本,将其添加到您的 静态文件 中,然后在模板中添加脚本标签
<script src="{{ url_for('static', path='/js/htmx.min.js') }}" defer></script>
现在,将 HtmxMiddleware 安装到ASGI应用程序中
-
使用Starlette
from asgi_htmx import HtmxMiddleware from starlette.middleware import Middleware app = Starlette( middleware=[ ..., Middleware(HtmxMiddleware), ..., ], )
-
使用FastAPI
from asgi_htmx import HtmxMiddleware from fastapi import FastAPI app = FastAPI() app.add_middleware(HtmxMiddleware)
您现在可以访问 scope["htmx"](一个 HtmxDetails 的实例)在端点上
# `HtmxRequest` makes code editors type-check `request.scope["htmx"]`
from asgi_htmx import HtmxRequest as Request
from .resources import templates
async def home(request: Request):
template = "home.html"
context = {"request": request}
if (htmx := request.scope["htmx"]):
template = "partials/items.html"
context["boosted"] = htmx.boosted # ...
return templates.TemplateResponse(template, context)
请参阅 示例 以获取完整的工作示例代码。
API参考
HtmxMiddleware
一个ASGI中间件,将 scope["htmx"] 设置为 HtmxDetails 的一个实例(scope 指的是ASGI范围)。
app = HtmxMiddleware(app)
HtmxDetails
一个助手,提供对HTMX特定的 请求头 的快捷访问。
htmx = HtmxDetails(scope)
__bool__() -> bool- 如果请求使用HTMX(存在HX-Request),则返回True,否则返回False。boosted: bool- 反映HX-Boosted头:如果请求通过具有hx-boost属性的元素,则返回True。current_url: str | None- 反映HX-Current-URL头:浏览器的当前URL,对于非HTMX请求为None。history_restore_request: str- 与HX-History-Restore-Request头部对应:如果请求是本地历史缓存失效后的历史恢复,则为True。prompt: str | None- 与HX-Prompt对应:如果使用了hx-prompt,则为用户响应,否则为None。target: str | None- 与HX-Target对应:如果存在,则为目标元素的id,否则为None。trigger: str | None- 与HX-Trigger对应:如果存在,则为触发元素的id,否则为None。trigger_name: str | None- 与HX-Trigger-Name对应:如果存在,则为触发元素的name,否则为None。triggering_event: Any | None- 与Triggering-Event对应,由 event-header 扩展 设置:如果存在,则为触发请求的事件的序列化 JSON 表示形式,否则为None。
HtmxRequest
对于基于 Starlette 的框架,使用此代替标准的 starlette.requests.Request,以便代码编辑器理解 request.scope["htmx"] 包含一个 HtmxDetails 实例。
from asgi_htmx import HtmxRequest as Request
async def home(request: Request):
reveal_type(request.scope["htmx"]) # Revealed type is 'HtmxDetails'
许可证
MIT
变更日志
此项目的所有重大更改都将记录在此文件中。
格式基于 Keep a Changelog。
0.1.0 - 2022-05-30
初始版本
添加
- 添加
HtmxDetails,它有助于处理HX-*请求头部。 - 添加
HtmxMiddleware,它将自动将HtmxDetails实例添加为scope["htmx"]。 - 添加
HtmxRequest,它有助于在基于 Starlette 的框架中为request.scope["htmx"]提供类型提示。
项目详情
下载文件
下载适合您平台的文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。
源分布
asgi-htmx-0.1.0.tar.gz (24.9 kB 查看哈希值)
构建分布
asgi_htmx-0.1.0-py3-none-any.whl (6.4 kB 查看哈希值)
关闭
asgi-htmx-0.1.0.tar.gz 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 3c6cb1419f05d53ea593bfe684c88b4941b22063c7628720ec99de9197587623 |
|
| MD5 | 22d078e9623e0abe14c1dd56ccc9f8c3 |
|
| BLAKE2b-256 | ab6bd013c1e0fd6de4f8fbbc253d74766df50146bacfee856093722f10d30a2e |
关闭
asgi_htmx-0.1.0-py3-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 622a98b5c31a8b9857de6a5a9cd97d584b0ee21b88e0a8a56dc237d172b75c9b |
|
| MD5 | dbb335f83765d2a5ad082ba46f4f1478 |
|
| BLAKE2b-256 | 3bc75490c81826f003038fab6047384ac77fd848296453e6dd0784b055ebba41 |