FastHTML快速入门:调试模式和 URL中的变量
调试模式
FastHTML基于FastAPI友好的装饰器模式来指定URL,并添加了额外功能:
main.py
from fasthtml.common import *
app, rt = fast_app()
@rt("/")
def get():
return Titled("FastHTML", P("让我们开始吧!"))
@rt("/hello")
def get():
return Titled("你好,世界!")
serve()
第5行:第5行的“/” URL是项目的首页。这可以通过访问127.0.0.1:5001来找到。
第9行:如果用户访问127.0.0.1:5001/hello,项目将找到第9行的“/hello” URL。
小贴士
看起来
get()
被定义了两次,但实际上并非如此。每个用rt
装饰的函数都是完全独立的,并且被注入到路由器中。我们不是在模块的命名空间(locals()
)中调用它们。相反,我们使用rt
装饰器将它们加载到路由机制中。
你可以做更多的事情!继续阅读,了解我们如何使URL的部分内容动态化。
URL中的变量
@rt("/{name}/{age}")
def get(name: str, age: int):
return Titled(f"你好 {name.title()}, 年龄 {age}")
serve()
第5行:我们指定了两个变量名,name
和age
。
第6行:我们定义了两个与变量同名的函数参数。你会注意到我们指定了要传递的Python类型。
第7行:我们在项目中使用这些函数。
尝试访问这个地址:127.0.0.1:5001/uma/5。你应该会看到一个页面显示:
“你好 Uma, 年龄 5”。
如果我们输入了错误的数据会发生什么?
127.0.0.1:5001/uma/5这个URL之所以有效,是因为5
是一个整数。如果我们输入的不是整数,比如127.0.0.1:5001/uma/five,那么FastHTML将返回一个错误,而不是网页。
FastHTML URL路由支持更复杂的类型
我们这里提供的两个例子使用了Python内置的
str
和int
类型,但你也可以使用自己的类型,包括更复杂的类型,比如由attrs、pydantic甚至sqlmodel等库定义的类型。