1.初识Flask框架


Flask01 初识Flask框架

1.Flask框架介绍与环境搭建
1.1Flask介绍
	Flask诞生于2010, 使用python语言基于Werkzeug工具箱编写的轻量级Web开发框架
	Flask本身相当于一个内核, 其他几乎所有的功能都要用到扩展(邮件:Flask-Mail, 用户认证:Flask-Login, 数据库:Flask-SQLAlchemy).
    Flask的核心在于Werkzeug(路由模块), Jinja2模板引擎.
	# Flask的"轻"
    Flask的"轻", 不代表其功能不够强大, Flask拥有丰富的扩展, 其依赖于扩展来给应用添加功能, 众多的插件提供了数据库集成, 表单验证, 上传处理,各种各样的开放认证技术等, Flask的这些特性使得它在web开发方面变得非常流行
    # 注意: 如果构建大型项目, 使用很多扩展, Flask也会变的跟Django一样的重.
1.2.Flask框架环境搭建
# 安装虚拟环境管理包: virtualenvwrapper
pip install virtualenvwrapper-win

# 虚拟环境命令
创建虚拟环境: mkvirtualenv envname
激活虚拟环境: workon envname
查看虚拟环境: lsvirtualenv
移除虚拟环境: rmvirtualenv envname
退出虚拟环境: deactivate
    
# 环境依赖技巧
生成依赖清单: pip freeze > requirements.txt
自动安装依赖: pip install -r requirements.txt
# Flask框架的安装
pip install flask==1.0.2

# 注意:
flask的核心是Werkzeug和Jinja2, 所以在安装Flask的同时, 会自动安装上面的两个依赖.
3.完美邂逅: Hello Flask
# 实现Flask入门应用
# 实现步骤:
    # 1.导入Flask类
    # 2.实例化Flask对象
    # 3.编写路由与视图
    # 4.启动服务
# 实现Flask入门应用
# 实现步骤:
# 1.导入Flask类
from flask import Flask

# 2.实例化Flask对象
app = Flask(__name__)


# 3.编写路由与视图
@app.route('/')
def index():
    return 'Hello Flask'


# 4.启动服务
if __name__ == '__main__':
    app.run()
# 知识点抽取:
1.实例化Flask对象:
app = Flask(__name__)
	1).__name__参数用于确定启动程序的位置
    2).__name__参数可以传递除了标准模块名的任意字符串, 但不推荐
    3).__name__参数如果传递标准模块名, 不影响路由的匹配, 但会影响静态文件的加载
    
2.@app.route('/'): 路由配置
@app.route('路由')是一装饰器的形式构建路由的, 其第一个参数为路由路径

3.app.run(): Flask实例的方法, 用于启动web服务, 可选参数如下:
	- host: 服务启动的IP地址
    - port: 服务启动的端口
    - debug: 是否以调试模式启动
    示例: app.run(host='127.0.0.1', port=8899, debug=True)

2.Flask配置
# Flask项目配置文件加载方式:
	1.从配置对象中加载
    2.从配置文件中加载
    3.从环境变量中加载
2.1从配置对象中加载
# 1.从配置对象中加载

# (1).实现步骤:
    - 创建配置类(建议单独文件中创建)
    - 加载配置对象
    - 使用配置

# (2).示例:
	1).settings.py代码:
    class DefaultConfig(object):
        MYSQL_HOST = '127.0.0.1'
        MYSQL_PORT = 3306
    2).Flask实例文件代码:
    from flask import Flask
    # 导入配置类
    from settings import DefaultConfig

    app = Flask(__name__)
    # 从配置对象中加载配置
    app.config.from_object(DefaultConfig)

    
    @app.route('/')
    def index():
        # get方式调用配置
        mysql_port = app.config.get('MYSQL_PORT')
        print(mysql_port)
        # 字典键值方式调用配置
        mysql_host = app.config['MYSQL_HOST']
    	print(mysql_host)
        return 'load config from object'

2.2从配置文件加载
# 2.从配置文件加载

# (1).实现步骤:
	- 创建配置文件(py文件或其他格式文件均可)
    - 加载配置文件
    - 使用配置
    
# (2).示例:
	1).创建配置文件settings.py, 并编写配置信息:
    MYSQL_HOST = '127.0.0.1'
    MYSQL_PORT = 3306
    2).Flask实例代码:
    from flask import Flask

    app = Flask(__name__)
    # 从文件加载配置
    app.config.from_pyfile('settings.py')


    @app.route('/')
    def index():
        # 获取配置信息
        mysql_port = app.config.get('MYSQL_PORT')
        print(mysql_port)
        mysql_host = app.config['MYSQL_HOST']
        print(mysql_host)
        return 'Hello Flask'


    if __name__ == '__main__':
        app.run()
2.3从环境变量中加载
# 3.从环境变量中加载

# (1).实现步骤:
	- 创建配置文件(存放敏感信息, 不与项目同目录)
    - 添加配置文件环境变量
    - 获取配置

# (2).添加配置文件环境变量
	1).创建配置文件, 并拷贝配置文件路径: 步骤略
    2).加载配置文件:
    app.config.from_envvar('settings')
    注意: 如果配置文件加载不到则会抛出异常, 禁止抛出异常可以添加silent参数为TRUE, 即app.config.from_envvar('settings', silent=True)
    3).设置配置文件的环境变量, 如下图:
    4).获取配置与上面两种方式一致

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B7WgkoPx-1669171169413)(images/1-1.gif)]

三种配置方式对比:
1.从对象加载配置: 配置方式灵活, 可复用性强, 但不安全
2.从文件加载配置: 复用性不好, 也不安全, 但是官方推荐用法
3.从环境变量加载: 相对安全, 利于配置敏感信息, 推荐使用

3.工厂模式与APP封装与Flask路由
3.1工厂模式与APP封装
# 1.设计模式
设计模式是由GoF(Gang of Four)首先提出的, 设计模式就是解决特定问题的解决方案. 它本身是一种发现, 而不是一种发明. 
GoF在设计模式的书中给出了23中涉及模式, 共分为三大类:
    - 创建型模式
    - 结构型模式
    - 行为型模式
(23种设计模式自己科普, 课后拓展作业)
# 2.工厂模式
工厂模式, 在于提供一个"工厂", 负责创建其他类型对象, 客户端使用某些参数调用此方法之后, 工厂会据此创建所需类型的对象, 然后将它们返回给客户端.
简单工厂模式, 允许接口创建对象, 但不会暴露对象的创建逻辑.

# 工厂模式实例:
from abc import ABCMeta, abstractmethod

# 接口类
class Animal(metaclass=ABCMeta):
  @abstractmethod
  def do_say(self):
    pass
  

# 狗类
class Dog(Animal):
  def do_say(self):
    print('wang wang!')
    

# 猫类
class Cat(Animal):
  def do_say(self):
    print('miao miao!')
    

    
# 工厂类
class ForestFactory(object):
  def make_sound(self, object_type):
    return eval(object_type)().do_say()
  

# 程序入口
if __name__ == '__main__':
    ff = ForestFactory()
    animal = input("which animal should make_sound Dog or Cat?")
    ff.make_sound(animal)
# 3.APP封装
# 实现过程
from flask import Flask
# 配置类封装在settings文件中
from settings import DefaultConfig, DevelopmentConfig


# 封装app的工厂函数
def create_flask_app(config):
    app = Flask(__name__)
    # 从对象加载配置
    app.config.from_object(config)
    # 从环境变量加载配置
    app.config.from_envvar('settings', silent=True)
    return app


app = create_flask_app(DevelopmentConfig)


@app.route('/')
def index():
    return 'Hello Flask'

# 4.settings配置类文件
class DefaultConfig(object):
    SECRET_KEY = 'SJFDSjkhsfk#$%^&kdfjiw683942'
	pass    
 
class DevelopmentConfig(DefaultConfig):
    DEBUG = True
    pass
3.2.Flask路由定义
# 路由定义
Flask的路由为装饰器实现的, 语法及参数如下:
@app.route(url, method=[....], endpoint="...")
def index():
    pass

# 参数:
- URL: 路由路径
- method: 视图允许的请求方法, 如不指定method, 则默认只允许GET请求访问视图
- endpoint: 端点, 可以视为路由别名, 如果endpoint不指定, 则默认endpoint的值为视图函数名
3.3路由映射的查看
# 路由映射的查看
在flask项目中有两种方式查看路由, 一种命令行直接查看, 一种通过app的路由映射属性进行查看
    - flask routes: 命令行查看项目路由
    - app.url_map: app路由属性查看
        
# 1.命令行查看方式:
服务器运行启动方式下, 直接在命令行运行: flask routes即可看到项目的路由表:

Endpoint  Methods  Rule
--------  -------  -----------------------
index     GET      /
static    GET      /static/<path:filename>
    
# 说明:
    - endpoint: 路由别名, 不设置则默认为视图名称
    - methods: 路由支持的请求方法
    - rule: 路由规则
    - static: 项目默认添加的静态文件路由
        
# 2.app路由属性查看方式
无论何种启动方式下, 在视图中 `print(app.url_map)` 即可在触发路由时打印路由映射关系.

Map(
    [
        <Rule '/' (GET, HEAD, OPTIONS) -> index>,
 		<Rule '/static/<filename>' (GET, HEAD, OPTIONS) -> static>
    ]
)

# 说明:
	- Map: 表示路由映射
    - Rule: 路由映射对象, 其后依次是: 路由规则, 请求方法, 路由别名

4.服务器启动方式
在Flask1.0版本之后, Flask调整为开发服务器启动方式, 将app.run()调整为 flask run命令启动Flask项目.
# 终端启动步骤:
	(1).指定启动实例: export FLASK_APP = '脚本名'
	(2).指定启动模式: export FLASK_ENV = 'development': development为开发模式, production为生产模式, 默认启动为生产模式
	(3).启动命令详解: flask run -h ipaddress -p port
			- flask run默认启动在127.0.0.1:5000- 指定启动的盘IP使用-h参数, -p指定启动的端口
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

(initial)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值