创建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地址
Iyoyo电子书 一本集作者多年开发经验的python电子书 all right reserved,powered by Gitbook文件修订时间: 2022年 10:58:11