第一个Flask项目
本文适合有一定前端、Python、网路基础的同学阅读。
1、安装环境
创建虚拟环境
mkvirtualenv flask
安装Flask
pip install flask
查看虚拟环境
workon
进入虚拟环境
workon flask_env
列出当前虚拟环境安装的库
pip list
2、创建项目
app.py
rom flask import Flask
app = Flask(__name__) # 初始化 Flask项目的服务
@app.route('/')
def hello_world(): # put application's code here
return 'Hello World!'
if __name__ == '__main__':
app.run()
3、启动程序
方式一:pycharm run
方式二 :terminal python app.py
方式三 进入目录 python app.py
方式四 设置环境变量 set FLASK_APP = app.py
flask run
Ctrl C 关闭程序
4、访问项目
5、参数说明
文件:app.py
rom flask import Flask
app = Flask(__name__) # 初始化 Flask项目的服务
@app.route('/')
def hello_world(): # put application's code here
return 'Hello World!'
if __name__ == '__main__':
app.run()
接下来就来详细查看一下 Flask 应用程序在创建的时候一些需要我们关注的参数
def __init__(
self,
import_name: str,
static_url_path: t.Optional[str] = None,
static_folder: t.Optional[t.Union[str, os.PathLike]] = "static",
static_host: t.Optional[str] = None,
host_matching: bool = False,
subdomain_matching: bool = False,
template_folder: t.Optional[str] = "templates",
instance_path: t.Optional[str] = None,
instance_relative_config: bool = False,
root_path: t.Optional[str] = None,
):
import_name:str,
当前Flask程序所在的包(模块)名字,传__name__
就可以 其可以决定 Flask 在访问静态文件时查找的路径
static_url_path: t.Optional[str] = None,
静态文件访问路径,可以不传,默认为:/ + static_folder
static_folder: t.Optional[t.Union[str, os.PathLike]] = "static",
静态文件存储的文件夹,可以不传,默认为static
template_folder: t.Optional[str] = "templates",
模板文件存储的文件夹,可以不传,默认为templates
默认参数情况下
app = Flask(__name__)
|---static
|--- 1.png
|---templates
|--- index.html
|---helloword.py
访问127.0.0.1:5000:static/1.png
修改参数的情况下
from flask import Flask
app = Flask(__name__, static_url_path='/Flyme awei', static_folder='static') # 初始化 Flask项目的服务
@app.route('/')
def hello_world(): # put application's code here
return 'Hello World!'
if __name__ == '__main__':
# IP:0.0.0.0 代表当前计算机所有的IP地址,
# port:端口默认是 5000
# flask的debug模式:把错误信息显示到页面中
app.run(host='0.0.0.0', port=5000, debug=True)
debug源文件
app = Flask(__name__, static_url_path='/Flyme awei',static_folder='static')
----
|---folder_param # 此处目录名变化 |
|--- 1.png
|---helloworld.py
访问127.0.0.1:5000/static_url_path/1.png才可以访问到图片
app.run参数
可以指定运行的主机IP地址,端口,是否开启调试模式
app.run(host="0.0.0.0", port=5000, debug = True)
IP:0.0.0.0 代表当前计算机所有的IP地址
关于DEBUG调试模式
1.程序代码修改后可以自动重启服务器
2.在服务器出现相关错误的时候可以直接将错误信息返回到前端进行展示
6、应用程序配置参数
应用程序配置参数设置的是一个Web应用工程的相关信息,比如:
- 数据库的连接信息
- 日志的配置信息
- 自定义的配置信息
- ...
注意:这样可以集中管理项目的所有配置信息
Flask将配置信息保存到了app.config属性中,该属性可以按照字典类型进行操作。
1.从配置对象中加载
app.config.from_object(DefaultConfig)
# -*- coding: utf-8 -*-
# @File : 02应用程序参数.py
# @author: Flyme awei
# @email : 1071505897@qq.com
# @Time : 2022/7/26 0:25
from flask import Flask
class DefaultConfig(object):
"""默认Web项目配置"""
USER = 'Flyme awei'
PWD = 'root'
app = Flask(__name__)
app.config.from_object(DefaultConfig)
@app.route('/')
def index():
print(app.config['USER'])
print(app.config["PWD"])
return "hello word!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080)
这样的好处是可以在项目开发中来继承和重写:
class MyDevelopmentConfig(DefaultConfig):
DEBUG=True
2.从配置文件中加载
新建一个配置文件setting.py
,这个文件中的内容是: 参数名=参数值 ,比如:PWD = 'root'
app.config.from_pyfile('setting.py')
# -*- coding: utf-8 -*-
# @File : setting.py.py
# @author: Flyme awei
# @email : 1071505897@qq.com
# @Time : 2022/7/26 0:38
# Web 项目的整个配置文件
USER = 'Flyme awei'
PWD = 'root'
# -*- coding: utf-8 -*-
# @File : 02从配置对象中加载.py
# @author: Flyme awei
# @email : 1071505897@qq.com
# @Time : 2022/7/26 0:25
from flask import Flask
app = Flask(__name__)
app.config.from_pyfile('setting.py')
@app.route('/')
def index():
print(app.config['USER'])
print(app.config["PWD"])
return "hello word!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080)
3.从环境变量中加载
先配置环境变量
Flask使用环境变量加载配置的本质是通过环境变量值找到配置文件,再读取配置文件的信息,其使用方式为
app.config.from_envvar('环境变量名')
环境变量的值为配置文件的绝对路径
先在终端中执行如下命令
export PROJECT_SETTING='~/setting.py
'
# -*- coding: utf-8 -*-
# @File : 04从环境变量中加载.py
# @author: Flyme awei
# @email : 1071505897@qq.com
# @Time : 2022/7/26 0:50
from flask import Flask
app = Flask(__name__)
app.config.from_envvar('SETTING_PATH', silent=True)
@app.route('/')
def hello_word():
print(app.config['USER'])
print(app.config['PWD'])
return 'hello word'
if __name__ == '__main__':
app.run('0.0.0.0', 8888, debug=True)
silent
参数:False
表示不安静的处理,没有值时报错通知,默认为FalseTrue
表示安静的处理,即时没有值也让Flask正常的运行下去
4.从Pycharm中的运行时设置环境变量的方式加载
使用非常少
5.企业项目开发常用的方式
使用工厂模式创建Flask app,并结合使用配置对象与环境变量加载配置
- 使用配置对象加载默认配置
- 使用环境变量加载不想出现在代码中的敏感配置信息
def create_flask_app(config):
""" 创建Flask应用 :param config: 配置对象 :return: Flask应用 """
app = Flask(__name__)
app.config.from_object(config)
# 从环境变量指向的配置文件中读取的配置信息会覆盖掉从配置对象中加载的同名参数
app.config.from_envvar("PROJECT_SETTING", silent=True)
return app
class DefaultConfig(object):
"""默认配置"""
USER = 'ROOT'
class DevelopmentConfig(DefaultConfig):
DEBUG=True
# app = create_flask_app(DefaultConfig)
app = create_flask_app(DevelopmentConfig)
@app.route("/")
def index():
print(app.config['USER'])
return "hello world"