Flask框架

Flask框架介绍与环境搭建

Flask诞生于2010年, 使用python语言基于Werkzeug工具箱编写的轻量级Web开发框架
    Flask本身相当于一个内核, 其他几乎所有的功能都要用到扩展(邮件:Flask-Mail, 用户认证:Flask-Login, 数据库:Flask-SQLAlchemy).
    Flask的核心在于Werkzeug(路由模块), Jinja2模板引擎.

    # Flask的"轻"
 Flask的"轻", 不代表其功能不够强大, Flask拥有丰富的扩展, 其依赖于扩展来给应用添加功能, 众多的插件提供了数据库集成, 表单验证, 上传处理,各种各样的开放认证技术等, Flask的这些特性使得它在web开发方面变得非常流行
    # 注意: 如果构建大型项目, 使用很多扩展, Flask也会变的跟Django一样的重.

Flask框架环境搭建

# 安装虚拟环境管理包: virtualenvwrapper
pip install virtualenvwrapper

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

# Flask框架的安装
pip install flask

# 注意:
flask的核心是Werkzeug和Jinja2, 所以在安装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()

实例化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=8080, debug=True)

从配置对象中加载配置

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'

从配置文件加载

	1).创建配置文件settings.py, 并编写配置信息:
    MYSQL_HOST = '127.0.0.1'
    MYSQL_PORT = 3306
    2).Flask实例代码:
    import toml as toml
    from flask import Flask

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


    @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()

从环境变量中加载。。。。略

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

工厂模式与APP封装与Flask路由

工厂模式
工厂模式, 在于提供一个"工厂", 负责创建其他类型对象, 客户端使用某些参数调用此方法之后, 工厂会据此创建所需类型的对象, 然后将它们返回给客户端.
简单工厂模式, 允许接口创建对象, 但不会暴露对象的创建逻辑.

# 工厂模式实例:
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)

APP封装

首先导入flask模块

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'

settings配置类文件
 

class DefaultConfig(object):
    SECRET_KEY = 'SJFDSjkhsfk#$%^&kdfjiw683942'
    pass    
 
class DevelopmentConfig(DefaultConfig):
    DEBUG = True
    pass

Flask路由定义

Flask的路由为装饰器实现的, 语法及参数如下:

@app.route(url, methods=[....], endpoint="...")
def index():
    pass

参数:
- URL: 路由路径
- methods: 视图允许的请求方法, 如不指定method, 则默认只允许GET请求访问视图
- endpoint: 端点, 可以视为路由别名, 如果endpoint不指定, 则默认endpoint的值为视图函数名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值