Flask框架学习 Day1
以下学习资料均来自B站:《【2021全新合集】5天速成Flask Web框架开发项目实战(无偿分享完整版)----人工智能基础!》
Flask做什么的?
Flask 是一个微型的 Python 开发的 Web 框架,基于Werkzeug WSGI工具箱和Jinja2 模板引擎。 Flask使用BSD授权。 Flask也被称为“microframework”,因为它使用简单的核心,用extension增加其他功能。
Flask有两个主要的依赖:路由,调试和web服务器网关接口子系统有werkzeug提供;模版系统由jinja2提供,werzeug和jinja2都是由Flask的核心开发者开发而成。
flask 框架 核心 Werkzerug+jinja2 轻量化 只提供核心
框架轻重:
重量级的框架:为方便业务程序开发,提供丰富的工具,组件。如Django。
轻量级的框架:只提供web框架的核心功能,自由,灵活,高度定制,如Flask,Tornado。
常用扩展包
扩展列表:http://falsk.pocoo.org/extensions/
- Flask-SQL alchemy: 操作数据库
- Flask-RESTful:认证REST API的工具
还有很多
帮助文件
欢迎使用 Flask — Flask 0.10.1 文档 (jinkan.org)
环境搭建:
-
虚拟环境和pip的命令
#虚拟环境 mkvirtualenv # 创建虚拟环境 rmvirtualenv # 删除虚拟环境 workon # 进入虚拟环境,查看所有的虚拟环境 deactivate # 退出虚拟环境 #pip pip install #安装依赖包 pip uninstall #删除依赖包 pip list #查看已安装的依赖包 pip freeze #冻结当前环境的依赖包 -
创建虚拟环境
mkvirtualen flask -p python3 -
安装Djiango
使用flask1.0.2版本,注意需要联网pip install flask
工程搭建
Flask程序编写
创建helloworld.py文件
#导入Flask类
from flask import Flask
#Flask;类接收一个参数-name-
app = Flask(__name__)
#装饰器的作用是将路由映射道视图函数index
@app.route('/')
def index():
return 'hello world'
#Flask应用程序实例的run方法启动web服务器
if __name__ == '__main__':
app.run()
所有的Flask程序都必须创建一个程序实例。web服务器使用一个名为web服务器网关接口(Web Server Gateway Interface,WSGI)的协议,把接收自客户端的所有请求都转交给这个对象。程序实例是Flask类的对象。Flask类的构造函数只有一个必须指定的参数,既程序主模块或包的名字。在大多数程序中,python的__name__变量就是所需的值。
客户端(例如web浏览器)把请求发给web服务器,web服务器再把请求发送给Flask程序实例,程序实例需要知道对每个url请求运行哪些代码,所有保持了一个url到python函数的映射关系。处理url和函数之间的关系的程序称为路由。
使用程序实例提供的app.route修饰器,吧修饰的函数注册为路由。
把index()函数注册为程序跟地址的处理程序。如果部署程序的服务器域名为www.example.com,在浏览器中访问http://www.example.com后,会触发服务器执行index()函数。这个函数的返回值成为响应,是客户端接收到的内容,如果客户端是web浏览器,响应就是显示给用户查看的文档。
像index()这样的函数称为视图函数(view functhon)。视图函数返回的响应可以是包含html的简单字符串,也可以是复杂的表单。
程序实例用run方法启动flask集成的开发web服务器:
if _ name _ == '_ main _'是python,这里确保直接执行这个脚本时才启动开发web夫妻。如果这个脚本由其他脚本引入,程序假定父级脚本会启动不同的服务器,因此不会执行app.run()。
服务器启动后,会进入轮询,等待并处理请求。轮询会一直运行,知道程序停止,比如按ctrl-c键。
启动运行
- 手动启动
python helloworld.py
- pycharm中运行
要想运行这个程序,请确保激活你之前创建的虚拟环境,并安装了Flask。现在打开web浏览器,在地址栏中输入http://127.0.0.1:5000/。
参数说明
-
Flask对象的初始化参数
-
improt_name
- Flask 程序所在的包(模块),传
_ name _就可以 查找工程文件目录,例如:static、template - 其可以决定Flask在访问静态文件时查找的路径
- Flask 程序所在的包(模块),传
-
static_url_path
- 静态文件访问路径,可以不传,默认为:
/+static_folder
app.Flask(_name _,static_url_path=‘/s’)
将static的文件夹改为在输入s的情况下,也能找到对于的文件。例如:将一张图片存入到static/1.png 原来的访问地址http://127.0.0.1:5000/static/1.png
更改后:访问地址为http://127.0.0.1:5000/s/1.png/
- 静态文件访问路径,可以不传,默认为:
-
static_folder
-
静态文件存储的文件夹,可以不传,默认为
staticapp.Flask(_name _,static_url_path=‘/s’,static_folder=‘static_folder’)
在目录下指定一个静态文件目录,文件名称'static_folder'
-
-
template_folder
- 模版文件存储的文件夹,可以不传,默认为
templates
- 模版文件存储的文件夹,可以不传,默认为
-
-
应用程序配置参数
-
app.run()运行参数
Flask将配置信息保存到了app.config属性中,该属性可以按照字典类型进行操作。
读取
app.config.get(name)app.config[name]
设置
主要有三种方法:
-
从配置对象中加载
app.config.from_object(配置对象)class DefaultConfig(object): """默认配置""" SECRET_KEY = 'Tppphhh' app = Flask(_name_) app.config.from_object(DefaultConfig) @app.route('/') def index(): print(app.config['SECRET_KEY']) return "hello world"应用场景:
作为默认配置写在程序代码中
可以继承
class DevelopmentConfig(DefaultConfig): Debug=True实例:
from flask import Flask # 配置对象方式加载配置未见 class DefaultConfig(object): """ 默认配置 """ SECRET_KEY = 'csddsdsd087898dd77d' app = Flask(__name__) # 设置 app.config.from_object(DefaultConfig) # 定义视图 @app.route("/") def index(): # 读取配置信息 print(app.config['SECRET_KEY']) return "hello world" if __name__ == '__main__': app.run() -
从配置文件中加载
app.config.from_pyfile(配置文件)新建一个配置文件setting.py
SECRET_KEY = 'TPHDDDDDD'在Flask程序文件中
app = Flask(__name__) app.config.from_pyfile('setting.py') @app.route("/") def index(): print(app.config['SECRET_KEY']) return "hello world"应用场景:
在项目中使用固定的配置文件
实例:
setting.py 文件中
SECRET_KEY = 'csddsdsd087898dd77d'在主程序中
from flask import Flask app = Flask(__name__) # 设置 app.config.from_pyfile('setting.py') # 定义视图 @app.route("/") def index(): # 读取配置信息 print(app.config['SECRET_KEY']) return "hello world" if __name__ == '__main__': app.run() -
从环集变量中加载
环境变量就是我们设置在操作系统中,由操作系统代为保存的变量值。
Flask使用环境变量加载配置的本质是通过环境变量值找到配置文件,再读取配置文件的信息,其使用方式为
app.config.from_envvar('环境变量名')环境变量的值为配置文件的绝对路径
现在终端中执行如下命令
export PROJECT_SETTING='~/setting.py'再运行如下代码
app.Flask(_name_) app.config.from_envvar('PROJECT_SETTING',silent=True) @app.route("/") def index(): print(app.config['SECRT_KEY']) return "hello world"Flask
重定向
from flask import abort,redirect @app.route('/') def index(): return redirect("www.baidu.com")#直接跳转到百度

浙公网安备 33010602011771号