写点什么

【变量规则,HTML 转义,非法导入名称】flask 框架总结(三)

作者:黎燃
  • 2022 年 5 月 23 日
  • 本文字数:1012 字

    阅读完需:约 3 分钟

flask 框架总结

要给 URL 添加变量部分,可以把特殊字段标记为<variable_name>,这部分将会作为命令参数传递到函数。规则可以用 converter:variable_name 指定一个可选的转换器


@app.route('/user/<username>')def show_user_profile(username):    return 'User %s' % username    @app.route('/post/<int:post_id>')def show_post(post_id)return 'Post %d' post_id
复制代码


可以转类型,三个类型 int 、 float 、path

HTML 转义

当返回 HTML ( Flask 中的默认响应类型)时,为了防止注入攻击,所有用户提 供的值在输出渲染前必须被转义。使用 Jinja (这个稍后会介绍)渲染的 HTML 模板会自动执行此操作。


在下面展示的 escape() 可以手动转义。因为保持简洁的原 因,在多数示例中它被省略了,但您应该始终留心处理不可信的数据。


from markupsafe import escape
@app.route("/<name>")def hello(name): return f"Hello, {escape(name)}!"
复制代码


如果一个用户想要提交其名称为 <script>alert("bad")</script> ,那么 宁可转义为文本,也好过在浏览器中执行脚本。


路由中的 <name> 从 URL 中捕获值并将其传递给视图函数。

唯一的 URL / 重定向行为

以下两条规则的不同之处在于是否使用尾部的斜杠。:


@app.route('/projects/')def projects():    return 'The project page'
@app.route('/about')def about(): return 'The about page'
复制代码


projects 的 URL 是中规中矩的,尾部有一个斜杠,看起来就如同一个文件 夹。访问一个没有斜杠结尾的 URL ( /projects )时 Flask 会自动进行重 定向,帮您在尾部加上一个斜杠( /projects/ )。


about 的 URL 没有尾部斜杠,因此其行为表现与一个文件类似。如果访问这 个 URL 时添加了尾部斜杠(/about/ )就会得到一个 404 “未找到” 错 误。这样可以保持 URL 唯一,并有助于搜索引擎重复索引同一页面。

非法导入名称

FLASK_APP 环境变量中储存的是模块的名称,运行 flask run 命令就 会导入这个模块。如果模块的名称不对,那么就会出现导入错误。出现错误的时机是在 应用开始的时候。如果调试模式打开的情况下,会在运行到应用开始的时候出现导入 错误。出错信息会告诉您尝试导入哪个模块时出错,为什么会出错。


最常见的错误是因为拼写错误而没有真正创建一个 app 对象。


flask 默认采用是 jinja2 模板进行模板渲染,jinja2 是 python 第三方的一个模板渲染模块,通常用于 flask,tornado 框架中,jinja2 的开发大量参考了 django 的模板渲染系统,相似度达到 98%

发布于: 刚刚阅读数: 4
用户头像

黎燃

关注

前端工程师 2022.05.06 加入

专注学习分享前端知识。

评论

发布
暂无评论
【变量规则,HTML 转义,非法导入名称】flask框架总结(三)_5月月更_黎燃_InfoQ写作社区