当前位置: 首页 > news >正文

FastHTML快速入门: Cookies,Sessions,提示,认证和授权

Cookies

我们可以使用cookie()函数设置Cookie。在这个例子中,我们将创建一个timestamp Cookie。

from datetime import datetime
from IPython.display import HTML
@rt("/settimestamp")
def get(req):now = datetime.now()return P(f'设置为 {now}'), cookie('now', now)
HTML(client.get('/settimestamp').text)

输出:

<!doctype html>
<html><head><title>FastHTML页面</title>   </head><body><p>设置为 2024-09-26 15:33:48.141869</p></body>
</html>

现在让我们使用与Cookie名称相同的参数名来获取它。

@rt('/gettimestamp')
def get(now:parsed_date): return f'Cookie设置时间为 {now.time()}'
client.get('/gettimestamp').text

输出:

Cookie设置时间为 15:33:48.141903

Sessions

为了方便和安全起见,FastHTML有一种机制可以在用户的浏览器中存储少量数据。我们可以通过在路由中添加一个session参数来实现。FastHTML会话是Python字典,我们可以充分利用这一点。下面的例子展示了如何简洁地设置和获取会话。

@rt('/adder/{num}')
def get(session, num: int):session.setdefault('sum', 0)session['sum'] = session.get('sum') + numreturn Response(f'总和是 {session["sum"]}.')

提示(也称为消息)

提示,有时也称为“消息”,是用于通知用户某些事情已经发生的小通知。提示可以有四种类型:

  • 信息
  • 成功
  • 警告
  • 错误
    提示示例可能包括:
  • “支付已接受”
  • “数据已提交”
  • “请求已批准”
    提示需要使用setup_toasts()函数,并且每个视图都需要以下两个功能:
  • 会话参数
  • 必须返回FT或FtResponse组件
setup_toasts(app)
@rt('/toasting')
def get(session):# 通常一个提示就足够了,这使我们能够看到不同提示类型的实际效果。add_toast(session, f"提示正在烹饪", "info")add_toast(session, f"提示准备好了", "success")add_toast(session, f"提示变得有点脆", "warning")add_toast(session, f"提示烧焦了!", "error")return Titled("我喜欢提示")

第1行:setup_toasts是一个辅助函数,它添加了提示依赖。通常,这会在fast_app()之后立即声明。
第4行:提示需要会话。
第11行:具有提示的视图必须返回FT或FtResponse组件。

认证和授权

在FastHTML中,认证和授权的任务是通过Beforeware处理的。Beforeware是在路由处理程序被调用之前运行的函数。它们适用于全局任务,例如确保用户已认证或具有访问视图的权限。
首先,我们编写一个接受请求和会话参数的函数:

# 状态码303是一个重定向,可以将POST重定向为GET,
# 因此它适合登录页面。
login_redir = RedirectResponse('/login', status_code=303)
def user_auth_before(req, sess):# `auth`键在请求作用域中自动提供# 任何请求它的地方都可以使用,不能被用户通过查询参数、Cookie等注入,# 所以应该安全地使用。    auth = req.scope['auth'] = sess.get('auth', None)# 如果会话键不存在,则重定向到登录页面。if not auth: return login_redir

现在,我们将我们的user_auth_before函数作为第一个参数传递给
Beforeware类。我们还向skip参数传递了一个正则表达式列表,用于允许用户仍然可以访问主页和登录页面。

beforeware = Beforeware(user_auth_before,skip=[r'/favicon\.ico', r'/static/.*', r'.*\.css', r'.*\.js', '/login', '/']
)
app, rt = fast_app(before=beforeware)

http://www.mrgr.cn/news/74983.html

相关文章:

  • 工作和学习遇到的技术问题
  • 学习threejs,使用第一视角控制器FirstPersonControls控制相机
  • 万字长文解读深度学习——ViT、ViLT、DiT
  • 前端神经网络入门(三):深度学习与机器学习的关系、区别及核心理论支撑 - 以Brain.js示例
  • 桥田动态|桥田智能与柯马正式签订战略合作协议
  • ECharts 实现大屏地图功能
  • 人机界面与人们常说的“触摸屏”有什么区别?这下终于清楚了
  • 谷歌浏览器扩展程序开发指南
  • Linux项目自动化构建工具—make与makefile
  • spring @Qualifier 注解解决依赖注入时类型相同但名称不同的 bean问题
  • window上 opencpn主要文件位置
  • JavaScript——DOM编程、JS的对象和JSON
  • VTK知识学习(8)-坐标系统
  • 18 为什么这些SQL语句逻辑相同,性能却差异巨大?
  • Spring Data Redis常见操作总结
  • Redis使用
  • 初识Redis
  • 护照阅读器在银行应用:提升客户身份认证效率,强化金融安全防护
  • javascript-Web APLs (五)
  • 区块链智能合约开发:全面解析与实践指南
  • C#基元类型表
  • 大数据治理:从概念到实践的旅程
  • SELINUX和防火墙
  • 【MMIN】缺失模态想象网络用于不确定缺失模态的情绪识别
  • 数据库参数备份
  • 父子孙嵌套组件的生命周期