1.Flask框架的介绍与环境搭建
Flask是一个轻量级的web框架, Flask就提供了一个简单的内核.
- 轻量级:
Flask提供简单的内核, 其他功能需要扩展包来实现.
Flask在大型项目中使用的扩展包多了, 也会变得笨重.
pip install Flask==1.0.2
安装Flask框架, 会自动安装jinja2模板引擎与Werkzeug路由模块, 他俩使我们Flask框架的核心成员.
pip install virtualenvwrapper
1.创建虚拟环境: mkvirtualenv envname
2.激活虚拟环境: workon envname
3.安装包和查看安装包:
pip install pkname
pip list
pip show django
4.查看所有的虚拟环境: lsvirtualenv
5.退出虚拟环境: deactivate
6.删除虚拟环境: rmvirtualenv
pip freeze > requirements.txt
pip install -r requirements.txt路径
2.第一次邂逅Flask
from flask import Flask
app = Flask(__name__)
@app.route('/index')
def index():
return 'Hello xiaohehe'
if __name__ == '__main__':
app.run()
1.app = Flask(__name__)
说明:
(1).__name__: 在本文件运行时__name__的值为__main__, 如果一个文件作为包被导入, 包内的__name__的值为包的名字.(理解最好, 不理解没关系)
(2).Flask()实例化对象, 传递的__name__用于定位程序的位置
(3).注意:传递其他任意的非标准模块名均可, 但不推荐这样做
2.定义路由
flask采用装饰器形式定义路由, 语法形式如下:
@app.route('path', methods=['GET', 'POST'], endpoint='端点')
path: 路由地址
methods: 视图函数允许的请求方法, 如果不传递该参数, 默认视图只接受get请求
endpoint: 端点, 相当于别名
3.服务的启动:
app.run(host="127.0.0.1", port=5001, debug=True)
host: 启动的主机名
port: 启动的端口
debug: True开启调试模式, False不开启调试模式
3.Flask配置
1.从配置对象中加载配置
2.从文件中加载配置
3.从环境变量中加载配置
1.从配置对象中加载
(1).创建一个settings文件, 在文件中创建配置类
class Config(object):
REDIS_PORT = 6379
(2).从对象中加载配置
from settings import Config
app.config.from_object(Config)
(3).获取配置
app.config.get('配置名')
app.config['配置名']
注意:
2.从文件加载配置
(1).新建一个配置文件: settings.拓展名 (拓展名: py, cnf, config, ini)
(2).编写配置项, 采用"变量名=值"的关系, 注意, 变量用全大写的
(3).从文件加载配置:
app.config.from_pyfile('配置文件路径')
(4).获取配置信息:
app.config.get('配置名')
app.config['配置名']
1.创建一个配置文件, 一般这个配置文件不再我们的项目目录里
2.copy文件路径
3.在pycharm中设置环境变量
name: settings
value: 路径
4.代码中加载环境变量:
app.config.from_envvar('settings', silent=True)
(1).括号里面写的settings需要与环境变量的name一致
(2).silent=True代表加载不到, 不能报错
1.从对象加载配置: 配置方式灵活, 可复用性强, 但不安全
2.从文件加载配置: 复用性不好, 也不安全, 但是官方推荐用法
3.从环境变量加载: 相对安全, 利于配置敏感信息, 推荐使用
4.工厂模式与APP封装
设计模式是有GoF(Gang of four)首先提出, 设计模式是用来解决特定问题的解决方案, 它本身是一种发现, 而不是一种发明.
设计模式分类:
- 创建型设计模式
- 机构型设计模式
- 行为型设计模式
归结出来: 23个设计模式(自己去科普一下)
单例模式: 保证一个类只能有一个实例
MVC模式: M->model, V->view, c->controller
MTV模式: M->model, view->视图(Controller), T->Teleplate(view)
(MVC设计模式是为了解耦而存在)
门面模式: socket在TCP/IP网络模型中的设计模式
工厂模式, 在于提供一个"工厂", 这个工厂负责创建其他类型的对象, 客户端使用某些参数调用工厂类内部的方法, 可以根据参数的不同, 给客户端返回不同的对象
class Dog(object):
def do_say(self):
print('wang wang wang')
class Cat(object):
def do_say(self):
print('miao miao miao')
class Factory(object):
def make_sound(self, ani):
return eval(ani)().do_say()
if __name__ == '__main__':
f = Factory()
ani = input('请输入要实例化的类名: ')
f.make_sound(ani)
使用工厂模式封装APP, 就是为了可以给工厂函数传递不同的参数, 根据不同的参数返回不同的APP对象. 比如, 有一个配置文件, 内部有两个配置类, 一个用开发, 一个用户生产, 在开发阶段, 我们就给工厂函数传递一个开发的配置类, 这样工厂函数就能返回一个加载了开发配置的APP对象, 如果要上线了, 那就给工厂函数传递一个生成的配置类, 工厂函数就会返回一个加载了成产配置的APP对象
from flask import Flask
from settings import DevConfig, ProConfig
def create_flask_app(config):
app = Flask(__name__)
app.config.from_object(config)
return app
app = create_flask_app(ProConfig)
@app.route('/')
def index():
mysql_host = app.config.get('MYSQL_HOST')
print(mysql_host)
return 'fac'
if __name__ == '__main__':
app.run()
5.Flask路由的定义
Flask的路由为装饰器实现的, 语法及参数如下:
@app.route(url, methods=[....], endpoint="...")
def index():
pass
- URL: 路由路径
- method: 视图允许的请求方法, 如不指定method, 则默认只允许GET请求访问视图
- endpoint: 端点, 可以视为路由别名, 如果endpoint不指定, 则默认endpoint的值为视图函数名
6.路由映射的查看
1.app.url_map
2.命令行方式: flask routes
注意: 需要设置服务器启动方式后, 进行查看
7.服务器启动方式
在Flask1.0版本之后, flask调整为开发服务器启动方式, 将app.run()调整为flask run来启动Flask服务.
(1).指定启动实例: export FLASK_APP=脚本名
(2).指定启动的模式: export FLASK_ENV='development'
注: development为开发模式, production为生产模式
(3).启动命令详解: flask run -h ipaddr -p port
比如: 要启动在IP为125.13.133.46的8899端口上
flask run -h '125.13.133.46' -p 8899