为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 |