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

176 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情

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%