实现Flask基本程序

Posted xiongsheng666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现Flask基本程序相关的知识,希望对你有一定的参考价值。

实现Flask基本程序

1、简单的7行代码实现一个web服务器

from flask import Flask

app = Flask(__name__)


@app.route("/")
def hello():
    return 'hello world'


if __name__ == '__main__':
    app.run()


说明:这里的hello word和我们在python程序print打印的hello word完全不同,这是web服务器,前端访问请求响应的结果

2、实现Flask基本程序的要求

具体步骤:

1、导入Flask类
2、创建Flask类的实例对象
3、定义路由和视图函数
4、启动服务器

3、Flask实现web服务代码说明

1、导入Flask类

from flask import Flask

2、 创建Flask类的实例对象

app = Flask(__name__)

注意 这样对 Flask(name) 是有要求的
具体要求
参数:必须是字符串,__name__的作用确定程序启动文件所在的位置;

符串,__name__的作用确定程序启动文件所在的位置;

实例路径会影响静态文件的访问;
http://127.0.0.1:5000/static/hello.html

例如 “name” 行 abc不行、 ab行、 abcd行;

name” 行

ab行

abc不行

结论:如果传入的参数为标准模块名,会影响静态文件的访问,不会影响视图函数的访问;

3、定义路由和视图函数

@app.route("/")
def hello():
    return 'hello world'

4、程序入口

if __name__ == '__main__':
    app.run()

main方法说明

if __name__ == '__main__':

当前文件独立运行时,该表达式成立
当前文件被导入到其它文件中调用,该表达式不成立,name == 文件名

4、 应用程序配置参数

对于Flask对象初始化参数仅仅设置的是Flask本身的属性,比如:

Flask从哪里读取静态文件
Flask从哪里读取模板文件


等等。

应用程序配置参数设置的是一个Web应用工程的相关信息,比如:

数据库的连接信息
日志的配置信息
自定义的配置信息


等等

作用
集中管理项目的所有配置信息

使用方式
Django将所有配置信息都放到了settings.py文件中,而Flask则不同。

Flask将配置信息保存到了app.config属性中,该属性可以按照字典类型进行操作。

读取
app.config.get(name)
app.config[name]
设置
主要使用以下三种方式:

1、从配置对象中加载
2、从配置文件中加载
3、从环境变量中加载

1、从配置对象中加载

from flask import Flask


# 配置文件加载:字典形式存储配置信息

# 1、从配置对象中加载
class DefaultConfig(object):
    mysql_URL = 'mysql address 5555555555555'


app = Flask(__name__)
# 获取配置对象的配置信息
app.config.from_object(DefaultConfig)


@app.route('/')
def index():
    # config是Flask中自带的配置对象,保存了程序的配置信息
    print(app.config.get('MYSQL_URL'))
    return 'hello world'


if __name__ == '__main__':
    app.run()

from flask import Flask
from set import DefaultConfig, ProductionConfig

app = Flask(__name__)
app.config.from_object(DefaultConfig)


@app.route('/')
def index():
    # 获取配置信息
    print(app.config.get("MYSQL_URL"))

    return 'hello world'


if __name__ == '__main__':
    app.run()

2、从配置文件中加载

from flask import Flask

# 1、从配置文件中加载

app = Flask(__name__)
# 获取配置文件的配置信息, ini 初始化文件,里面保持的是配置信息
app.config.from_pyfile('settings.py')


@app.route('/')
def index():
    # 获取配置信息
    print(app.config.get('SECRET_KEY'))

    return 'hello world'


if __name__ == '__main__':
    app.run()


配置文件也可以不是.py形式 列如ini文件

from flask import Flask

# 1、从配置文件中加载

app = Flask(__name__)
# 获取配置文件的配置信息, ini 初始化文件,里面保持的是配置信息
app.config.from_pyfile('settings.py')


@app.route('/')
def index():
    # 获取配置信息
    print(app.config.get('SECRET_KEY'))

    return 'hello world'


if __name__ == '__main__':
    app.run()

3、从环境变量中加载

from flask import Flask

# 配置文件加载:字典形式存储配置信息
# 三种形式:
# 1、从配置对象中加载
# 2、从配置文件中加载
# 3、从环境变量中加载
# class DefaultConfig(object):
#     MYSQL_URL = 'mysql address'
#     REDIS_URL = 'redis address'

app = Flask(__name__)
# 获取配置对象的配置信息
from set import DefaultConfig, ProductionConfig

app.config.from_object(DefaultConfig)
# 获取配置文件的配置信息,可以加载不是py格式的文件;
# ini初始化文件,里面保存的是配置信息
# app.config.from_pyfile('settings.ini')
# 从环境变量中加载
# silent表示沉默,是否记载到环境变量的配置信息
# 如果True表示沉默,加载不到不报错
# 如果False表示不沉默,加载不到报错
app.config.from_envvar('SET', silent=True)


@app.route('/')
def index():
    # config是Flask中自带的配置对象,保存了程序的配置信息
    # print(app.config.get('MYSQL_URL'))
    # 获取配置信息
    # print(app.config.get('SECRET_KEY'))
    # 从环境变量文件中获取配置信息
    print(app.config.get("SECRET_KEY"))
    return 'hello world'


if __name__ == '__main__':
    app.run()

5、工厂函数

 需求: 在项目中,配置信息的使用方式;
 工厂模式:
 1. 定义工厂函数,封装创建程序实例的代码
 2. 定义函数的参数,可以根据参数的不同,生成不同的app
from flask import Flask

from set import DefaultConfig, ProductionConfig


# 需求: 在项目中,配置信息的使用方式;
# 工厂模式:
# 1. 定义工厂函数,封装创建程序实例的代码
# 2. 定义函数的参数,可以根据参数的不同,生成不同的app
def create_flask_app():
    app02 = Flask(__name__)
    app02.config.from_envvar('SET', silent=True)
    return app02


def create_app(config_name):
    app01 = Flask(__name__)
    app01.config.from_object(config_name)
    return app01


app = create_app(DefaultConfig)


@app.route("/")
def hello():
    print(app.config.get("MYSQL_URL"))
    print(app.config.get("REDIS_URL"))
    return 'hello world'


if __name__ == '__main__':
    app.run()

以上是关于实现Flask基本程序的主要内容,如果未能解决你的问题,请参考以下文章

python+mongodb+flask的基本使用

Flask程序的基本结构

Flask系列-程序基本结构

《flask web 开发》笔记 -- (2)? 程序基本结构

Flask 源码分析-基本工作流程

利用flask上下文管理原理,实现线程之间的数据安全