## Flask介绍:
* Flask是一种使用Python编写的轻量级的Web框架, WSGI工具采用Werkzeug,模板引擎使用Jinja2, Flask使用的是BSD授权
* Flask核心简单, 可以自定义扩展, 没有固定的数据库和模板等设置, 简单轻便
* Flask也有web开发'微'框架之称
## 开始项目
下面是官网中的一个Flask项目, 只需要简单的7行代码, 我们就是可以让一个Flask项目运行起来。
~~~
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
~~~
## 项目拆分
Flask由于框架体量小, 所有的拓展包都需要我们自己去安装, 所以一个Flask项目会安装很多的拓展包是很常见的。基于项目的可拓展性和代码的可阅读性, 当代码量较大时, 将所有的代码写在一个文件中是一件很可怕的事, 所以我们就要对其进行拆分, 主要还是参考 MVC模式进行, 将不同的功能放在其对应的模块中, 方便我们进行阅读。
* 创建app的文件目录, 将views 和 models 写入其中进行管理
* 在app目录下创建 static 目录,存放静态文件
* 在app目录下创建 templates 目录, 存放网页模板
* 在app目录下创建settings.py文件,存放所有的配置文件
* 创建ext.py文件,用来管理扩展的工具函数
* 在app下的\_\_init\_\_.py文件中,创建一个函数用来创建app并整合所有的配置信息。
* 将主要的执行内容写在执行文件manage.py中,manage.py和创建的app目录为同一级, 在这里面调用app下\_\_init\_\_.py中创建的函数来创建app,并且引入 Manage 进行管理app。
## 整体结构:
![](https://img.kancloud.cn/4a/3e/4a3e9070a4faa299d9d346bca9465076_541x390.png)
```
from flask_script import Manager
from myapp import create_app
app = create_app('debug')
manage = Manager(app = app)
if __name__ == '__main__':
manage.run()
manage.py
```
static目录用来存放静态文件目录。如css,js,img等。templates目录用来存放html模板文件。
```
from flask import Flask
from myapp.ext import init_ext #导入扩展库中的函数
from myapp.settings import conf #从settings中导入配置文件
from myapp.views import init_blue #从views中导入注册蓝图的函数
from myapp.models import db #从models中导入实例化SQLAlchemy的对象
def create_app(env_name): #创建一个创建app的函数,并传入要配置的环境
if not env_name in conf.keys():
raise Exception('环境名称有问题')
app = Flask(__name__)
app.config.from_object(conf.get(env_name)) #根据传入的环境导入settings配置
init_ext(app) #实例化第三方插件
init_blue(app) #实例化蓝图
return app
__init__.py
```
```
from flask_session import Session
from flask_sqlalchemy import SQLAlchemy
def init_ext(app): #实例化第三方插件并绑定app
se = Session()
se.init_app(app)
db = SQLAlchemy()
db.init_app(app)
ext.py
```
```
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy() #实例化SQLAlchemy对象
class Student(db.Model):
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
name = db.Column(db.String(30),nullable=True,unique=True)
models.py
```
```
import os
from redis import StrictRedis
# 数据库的连接拼写规则
def get_db_uri(conf):
uri = '{backend}+{engine}://{user}:{pwd}@{host}:{port}/{name}'.format(
backend=conf.get('backend'),
engine=conf.get('engine'),
user=conf.get('user'),
pwd=conf.get('pwd'),
host=conf.get('host'),
port=conf.get('port'),
name=conf.get('name'),
)
return uri
class Config:
Debug = False
Test = False
Online = False
SECRET_KEY = 'aisofhas'
#做session持久化的配置
SESSION_TYPE = 'redis' # 指定session存储方案
SESSION_KEY_PREFIX = 'myapp:' # 设置缓存的开头
SQLALCHEMY_TRACK_MODIFICATIONS = False
class DebugConfig(Config):
Debug = True
SESSION_REDIS = StrictRedis('127.0.0.1',db=1)
DATABASE = {
'backend':'mysql',
'engine':'pymysql',
'user':os.environ.get('DB_USER'),
'pwd':os.environ.get('DB_PASSWD'),
'host':'127.0.0.1',
'port':3306,
'name':'hzflask'
}
SQLALCHEMY_DATABASE_URI = get_db_uri(DATABASE)
class TestConfig(Config):
Test = True
SESSION_REDIS = StrictRedis('127.0.0.1', db=2)
DATABASE = {
'backend': 'mysql',
'engine': 'pymysql',
'user': os.environ.get('DB_USER'),
'pwd': os.environ.get('DB_PASSWD'),
'host': '127.0.0.1',
'port': 3306,
'name': 'hzflask2'
}
SQLALCHEMY_DATABASE_URI = get_db_uri(DATABASE)
class OnlineConfig(Config):
Online = True
SESSION_REDIS = StrictRedis('127.0.0.1', db=3)
DATABASE = {
'backend': 'mysql',
'engine': 'pymysql',
'user': os.environ.get('DB_USER'),
'pwd': os.environ.get('DB_PASSWD'),
'host': '127.0.0.1',
'port': 3306,
'name': 'hzflask3'
}
SQLALCHEMY_DATABASE_URI = get_db_uri(DATABASE)
conf = {
'debug':DebugConfig,
'test':TestConfig,
'online':OnlineConfig,
}
settings.py
```
```
from flask import Blueprint, session, render_template
from myapp.models import db, Student
blue = Blueprint('wusir',__name__)
def init_blue(app):
app.register_blueprint(blue)
@blue.route('/')
def index():
return 'index'
views.py
```
- Python学习
- Python基础
- Python初识
- 列表生成式,生成器,可迭代对象,迭代器详解
- Python面向对象
- Python中的单例模式
- Python变量作用域、LEGB、闭包
- Python异常处理
- Python操作正则
- Python中的赋值与深浅拷贝
- Python自定义CLI三方库
- Python并发编程
- Python之进程
- Python之线程
- Python之协程
- Python并发编程与IO模型
- Python网络编程
- Python之socket网络编程
- Django学习
- 反向解析
- Cookie和Session操作
- 文件上传
- 缓存的配置和使用
- 信号
- FBV&&CBV&&中间件
- Django补充
- 用户认证
- 分页
- 自定义搜索组件
- Celery
- 搭建sentry平台监控
- DRF学习
- drf概述
- Flask学习
- 项目拆分
- 三方模块使用
- 爬虫学习
- Http和Https区别
- 请求相关库
- 解析相关库
- 常见面试题
- 面试题
- 面试题解析
- 网络原理
- 计算机网络知识简单介绍
- 详解TCP三次握手、四次挥手及11种状态
- 消息队列和数据库
- 消息队列之RabbitMQ
- 数据库之Redis
- 数据库之初识MySQL
- 数据库之MySQL进阶
- 数据库之MySQL补充
- 数据库之Python操作MySQL
- Kafka常用命令
- Linux学习
- Linux基础命令
- Git
- Git介绍
- Git基本配置及理论
- Git常用命令
- Docker
- Docker基本使用
- Docker常用命令
- Docker容器数据卷
- Dockerfile
- Docker网络原理
- docker-compose
- Docker Swarm
- HTML
- CSS
- JS
- VUE