创建Flask工程
创建Flask项目没有命令快捷方式,只需要在项目文件夹下创建一个普通的py文件,导入Flask实例化一个Flask应用程序。
示例:
# coding=utf-8
# 导入Flask类
from flask import Flask
# Flask 接收一个参数__name__,当前模块的文件名
# Flask 在查找静态文件,或者模板时候默认以当前文件所在的目录去查找
# 如果传一个不存在的模块名,将默认使用当前文件
app = Flask(__name__)
# 装饰器将路由映射到视图index
@app.route('/')
def index():
return "ok"
if __name__ == '__main__':
# Flask 应用程序实例的方法run启动web服务器
app.run(debug=True)
初始化参数
- import_name: 导包的目录
- static_path: 访问静态资源的路径
- static_url_path: 访问静态文件的url前缀
- static_folder: 默认‘static’
- template_folder: 默认‘templates’
实例化Flask对象之后,静态文件默认在Flask第一个参数指定的模块所在的目录下,静态文件使用static
目录,模板使用templates
目录。
在static目录下放一张图片 01.jpg,然后通过静态文件路径可以访问到:http://127.0.0.1:5000/static/01.jpg
# coding=utf-8
# 导入Flask类
from flask import Flask
# Flask 接收一个参数__name__,
# 导入模块的目录, flask以这个目录为基础,寻找静态文件目录static和模板目录templates
app = Flask(__name__,
# static_path='/static/aaa', # 访问静态资源的路径,跟static_url_path 参数冲突,static_path优先级比较高
static_url_path='/python', # 访问静态资源的url前缀
static_folder='static', # 静态文件目录名,默认static
template_folder='templates', # 模板文件目录名,默认templates
)
# 装饰器将路由映射到视图index
@app.route('/')
# 定义一个视图
def index():
return "ok"
if __name__ == '__main__':
# Flask 应用程序实例的方法run启动web服务器
app.run()
配置
django项目中有一个setting.py的配置文件,但是Flask中没有,需要自己定义。
常见的两种方式:
从配置文件中读取配置 app.config.from_pyfile('文件名')
从类中读取配置信息 app.config.from_object(类名)
Flask 默认是运行在线上模式,也就是说出错了是看不到错误堆栈信息的,为了好调试一般开发阶段会将调试打开。 django中默认开启调试DEBUG = True,Flask中开启调试同样只需要在配置中写入 DEBUG=True。
从配置文件中读取配置 示例:
创建一个文件 config.cfg
保存配置信息
# coding=utf-8
# 导入Flask类
from flask import Flask
# Flask 接收一个参数__name__,
# 导入模块的目录, flask以这个目录为基础,寻找静态文件目录static和模板目录templates
app = Flask(__name__,
# static_path='/static/aaa', # 访问静态资源的路径,跟static_url_path 参数冲突,static_path优先级比较高
static_url_path='/python', # 访问静态资源的url前缀
static_folder='static', # 静态文件目录名,默认static
template_folder='templates', # 模板文件目录名,默认templates
)
# 设置配置信息获取方式,从配置文件中查找
# app.config.from_pyfile('config.cfg')
# 配置类
class Config(object):
DEBUG = True
# 设置配置信息获取方式,从配置对象中查找
app.config.from_object(Config)
# 装饰器将路由映射到视图index
@app.route('/')
# 定义一个视图
def index():
return "ok"
if __name__ == '__main__':
# Flask 应用程序实例的方法run启动web服务器
app.run()
注意:配置的变量名需要用大写。如果注册多个配置文件,后面注册的同名配置会覆盖掉前面的配置。一般使用一个工程只用一个配置文件。
读取配置参数
第一种方式: 在能访问到app对象的文件中可直接使用app.config.get方式获取配置参数 app.config.get('配置')
第二种方式: 需要从flask中导入current_app,在整个Flask项目中都可以使用,实际上也是app对象相到于一个别名。 current_app.config.get('配置名')
# coding=utf-8
# 导入Flask类
from flask import Flask,current_app
# Flask 接收一个参数__name__,
# 导入模块的目录, flask以这个目录为基础,寻找静态文件目录static和模板目录templates
app = Flask(__name__,
# static_path='/static/aaa', # 访问静态资源的路径,跟static_url_path 参数冲突,static_path优先级比较高
static_url_path='/python', # 访问静态资源的url前缀
static_folder='static', # 静态文件目录名,默认static
template_folder='templates', # 模板文件目录名,默认templates
)
# 设置配置信息获取方式,从配置文件中查找
# app.config.from_pyfile('config.cfg')
class Config(object):
DEBUG = False
A = 1
B = 2
# 设置配置信息获取方式,从配置对象中查找
app.config.from_object(Config)
# 装饰器将路由映射到视图index
@app.route('/')
# 定义一个视图
def index():
a = app.config.get('A')
b = current_app.config.get('B')
print(a+b)
return str(a+b)
if __name__ == '__main__':
# Flask 应用程序实例的方法run启动web服务器
app.run()
app.run参数
run方法源码
def run(self, host=None, port=None, debug=None, **options):
from werkzeug.serving import run_simple
if host is None:
host = '127.0.0.1'
if port is None:
server_name = self.config['SERVER_NAME']
if server_name and ':' in server_name:
port = int(server_name.rsplit(':', 1)[1])
else:
port = 5000
if debug is not None:
self.debug = bool(debug)
options.setdefault('use_reloader', self.debug)
options.setdefault('use_debugger', self.debug)
try:
run_simple(host, port, self, **options)
finally:
self._got_first_request = False
从源码中可以看出run方法是启动一个werkzug工具箱提供的简易服务器。 参数:
host 服务器主机地址,默认使用本机地址'127.0.0.1'
port 端口号,默认5000
debug 调试,参数是bool值 ,表示是否开启调试,True开启调试。默认Flase
app.run(host='0.0.0.0') # 这样可以监听本机所有ip地址