诞生于2010年,轻量级web开发框架。
Flask本身相当于一个内核,几乎所有其他功能都要用到扩展。
Flask的两个核心:WSGI工具箱采用Werkzeug(路由模块),模板引擎使用Jinja2。
Flask-SQLalchemy:操作数据库
Flask-migrate:管理迁移数据库
Flask-Mail:邮件
Flask-WTF:表单
Flask-Bable:提供国际化和本地化支持,翻译
Flask-script:插入脚本
Flask-Login:认证用户状态
Flask-OpenID:认证
Flask-RESTful:开发REST API的工具
Flask-Bootstrap:集成前端Twitter Bootstrap框架
Flask-Moment:本地化日期和时间
Flask-Admin:简单而可扩展的管理接口的框架
1、 Django功能大而全,Flask只包含基本的配置。
2、 Flask比Django更灵活。
3、 Flask在Django之后发布,现阶段有大量的插件和扩展满足不同的需求。
Python项目中必须包含一个requirement.txt文件,用于记录所有依赖包及其精确的版本号,以便在新环境中进行部署。
在虚拟环境使用以下命令将当前虚拟环境中的依赖包以及版本号生成至文件中:
pip freeze >requirement.txt
文件名可以更改,但最好使用约定俗成的requirement.txt
当需要创建这个虚拟环境的完全副本,可以运行以下命令创建一个新的虚拟环境
pip install –r requirement.txt
1、 当客户端想要获取资源时,先通过浏览器发起http请求。
2、 Web服务器会把来自客户端的所有请求都交给flask程序实例。
3、 程序实例使用Werkzeug来做路由分发(URL请求和视图函数之间的对应关系)。
4、 根据每个URL请求,找到具体的视图函数并进行调用。在Flask程序中,路由的实现一般是通过程序实例的装饰器实现。
5、 Flask调用视图函数后,可以返回两种内容:
a) 字符串内容:将视图函数的返回值作为响应内容,返回给客户端
b) HTML模板内容:获取到数据后,把数据传入HTML模板文件中,模板引擎负责渲染HTTP响应数据,然后返回响应数据给客户端。
from flask import Flask
#需要传入_name_,作用是为了确定资源所在的路径
app = Flask(__name__)
#Flask中定义路由,是通过装饰器实现的
@app.route('/')
def hello_world():
return 'Hello World!'
#启动程序
if __name__ == '__main__':
#执行app.run(),就会将Flask程序运行在一个建议的服务器上(Flask提供的,用于测试)
app.run()
from flask import Flask,render_template
app = Flask(__name__)
@app.route('/')
def hello_world():
return render_template('index.html')
if __name__ == '__main__':
app.run()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>我是一只橘子。</h1>
</body>
</html>
路由默认只支持GET。
使用methods参数指定可接受的请求方式,可以有多种方式。
例:
@app.route('/',methods=['GET','POST'])
def hello_world():
return 'Hello World!'
有时需要将同一类URL映射到同一个视图函数处理。
路由传递的参数默认为string。
例:
#使用<>定义路由的参数
@app.route('/user_id/' )
#需要在视图函数的()里面写上参数名,函数里面的代码才可以使用
def get_id(id):
return 'id %s' % id
运行结果:
路由的参数类型可以进行指定。
以int为例。
代码:
@app.route('/user_id/' )
def get_id(id):
return 'id %s' % id
当输入的参数为int类型时的运行结果:
当输入的参数不是int类型时的运行结果:
视图函数有两个作用:处理业务逻辑和返回响应内容。模板的作用就是承担视图函数的一个作用,即返回响应内容。
模板其实是一个包含响应文本的文件,使用占位符(变量)表示动态部分。
Flask使用Jinja2模板引擎来渲染模板。
渲染:使用真实值替换变量,再返回最终得到的字符串。
使用模板的好处:
1)、视图函数只负责业务逻辑和数据处理(业务逻辑方面)。
2)、模板取到视图函数的数据结果进行展示(视图展示方面)。
3)、代码结构清晰,耦合度低。
Jinja2:是python下被广泛应用的模板引擎,由python实现的模板语言,是Flask内置的模板语言。
模板语言:是一种被设计出来用于自动生成文档的简单文本格式。
Flask提供的render_template函数封装了Jinja2模板引擎。
render_template函数的第一个参数是模板的文件名,后面的参数都是键值对,表示模板中变量对应的真实值。
使用{# #}进行注释。
使用{{ }}表示变量。
变量代码块中可以是任意python类型或者对象,只要能被python的str()方法转换为一个字符串。
使用{% %}定义的控制代码块,可以实现一些语言层次的功能。
app.py文件中的内容
from flask import Flask,render_template
app = Flask(__name__)
hello = 'Hello world!'
list = [1,2,3,4]
@app.route('/',methods=['GET','POST'])
def index():
return render_template('index.html',hello = hello,list = list)
if __name__ == '__main__':
app.run()
index.html文件中的内容
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>我是一只橘子。</h1>
{# 变量代码块的使用 #}
{{ hello}}<br>
{{list[2]}}<br>
{{ list.2 }}<br>
{% for num in list %}
{% if num>2 %}
{{ num }}<br>
{% endif %}
{% endfor %}
</body>
</html>
过滤器的本质就是函数。
有时候,我们除了需要显示变量,还需要对其进行其他操作(如:修改显示、进行运算),但是在模板中是不能直接调用python中的某些方法的,这时就需要用到过滤器。
使用方法:
{{变量名|过滤器(参数)}}
在没有任何参数传递时,可以省略括号。
示例:
{{"i am an orange"| reverse |upper}}
safe:禁用转义
{{'orange' | safe}}
capitalize:把字符串的首字母转换成大写字母,其余转换成小写字母
{{'orange' | capitalize}}
lower:把字符串全部转换成小写
{{'ORANGE' | lower}}
upper:把字符串全部转换成大写
{{'orange' | upper}}
title:把字符串中的每个单词的首字母都转换成大写
{{'i am an orange' | title}}
reverse:反转字符串
{{'orange' | reverse}}
format:格式化输出
{{'%s is %d' | format('orange',17)}}
striptags:渲染前把值中的所有html标签删除
{{'orange' | striptags}}
first