HTTP 方法
Web 应用程序在访问 URL 时使用不同的 HTTP 方法。在使用 Flask 时,您应该熟悉 HTTP 方法。默认情况下,路由只响应 GET 请求。可以使用 route() 装饰器的 methods 参数来处理不同的 HTTP 方法。
from flask import request
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
return do_the_login()
else:
return show_the_login_form()
复制
如果存在 GET,Flask 会自动添加对 HEAD 方法的支持,并根据 HTTP RFC 处理 HEAD 请求。同样,也会自动实现 OPTIONS。
静态文件
动态 web 应用程序也需要静态文件。通常是 CSS 和 JavaScript 文件。理想情况下,Web 服务器被配置为提供这些服务,但在开发过程中,Flask 也可以这样做。只需在包中或模块旁边创建一个名为 static 的文件夹,即可在应用程序的 /static 路径上使用此静态文件。
要为静态文件生成 URL,请使用特殊的 'static' 端点名称:
url_for('static', filename='style.css')
复制
文件必须存储在文件系统的 static/style.css 中。
渲染模板
从 Python 中生成 HTML 并不有趣,而且实际上相当麻烦,因为为了保证应用程序的安全,必须自己进行 HTML 转义。正是因此,Flask 会自动为您配置 Jinja2 模板引擎。
要渲染模板,可以使用 render_template() 方法。您所要做的就是提供模板的名称以及要作为关键字参数传递给模板引擎的变量。下面是一个如何渲染模板的简单示例:
from flask import render_template
@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):
return render_template('hello.html', name=name)
复制
Flask 将在 templates 文件夹中查找模板。因此,如果应用程序是一个模块,那么这个文件夹就在该模块旁边,如果它是一个包,那么它实际上就在包中:
案例1:模块:
/application.py
/templates
/hello.html
复制
案例2:包:
/application
/__init__.py
/templates
/hello.html
复制
对于模板,可以使用 Jinja2 模板的全部功能。
下面是一个示例模板:
<!doctype html>
<title>Hello from Flask</title>
{% if name %}
<h1>Hello {{ name }}!</h1>
{% else %}
<h1>Hello, World!</h1>
{% endif %}
复制
在模板中,可以访问 config、request、session 和 g 对象,以及 url_for() 和 get_flashed_messages() 函数。
如果使用继承,模板尤其有用。如果想知道它是如何工作的,请参阅模板继承。基本上,模板继承可以在每个页面上保留某些元素(如页眉、导航和页脚)。
自动转义已启用,因此如果 name 包含 HTML,它将自动转义。如果信任一个变量,并且知道它将是安全的 HTML(例如,因为它来自一个将 wiki 标记转换为 HTML 的模块),则可以使用 Markup 类或模板中的 |safe 过滤器将其标记为安全。
下面是 Markup 类工作原理的基本介绍:
from markupsafe import Markup
print(Markup('<strong>Hello %s!</strong>') % '<blink>hacker</blink>')
print(Markup.escape('<blink>hacker</blink>'))
print(Markup('<em>Marked up</em> » HTML').striptags())
复制
原文:
https://flask.palletsprojects.com/en/2.0.x/quickstart/