后端入门实战Flask+Mysql
python2.7+flask2.0+pymysql
Flask项目结构
系统服务端开发仓库结构
Appserver/
├── app
│ ├── static/ # 静态资源文件夹
│ ├── templates/ # 模板文件夹
│ ├── __init__.py # 初始化文件
│ ├── user_sign_up.py # blueprint
│ ├── user_login.py # blueprint
│ ├── models.py # 数据库关系模型
│ └── view.py # 调用blueprint
├── config.py # 配置文件
├── createdb.py # 创建数据库
├── run.py # 主程序文件
├── requirements # 需求文件
└── README.md
MySQL数据库配置
在flask2.0中不再支持MySQLdb,因此选用pymysql
安装MySQL数据库驱动:
pip install mysql-python
安装SQLAlchemy:
pip install flask-sqlalchemy
在Python中,最有名的ORM框架是SQLAlchemy,可以把关系数据库的表结构映射到对象上。
config.py配置文件:
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:12345678@localhost:3306/mydb'
# 'mysql+pymysql://用户名称:密码@localhost:端口/数据库名称'
SQLALCHEMY_TRACK_MODIFICATIONS = True
app/models.py建立数据库模型:
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True, index=True)
role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
app/__init__.py初始化数据库db对象:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config.from_object('config')
db = SQLAlchemy(app, use_native_unicode='utf8')
createdb.py创建数据库:
from app.models import *
if __name__ == '__main__':
db.create_all()
数据库创建成功。
使用Blueprint进行多模块应用的开发
在使用flask进行一个项目编写的时候,可能会有许多个模块,比如上面目录的注册、登录等模块,如果把所有的这些模块都放在一个views.py文件之中,那么最后views.py文件必然臃肿不堪,并且极难维护,因此flask中便有了blueprint的概念,可以分别定义模块的视图、模板、视图等等,我们可以使用blueprint进行不同模块的编写,不同模块之间有着不同的静态文件、模板文件、view文件,十分方便代码的维护和管理。
上面的blueprint将注册与登录模块分开,当然你也可以另外建文件夹如下面这样
Appserver/
├── app
│ ├── static/ # 静态资源文件夹
│ ├── templates/ # 模板文件夹
│ ├── __init__.py # 初始化文件
│ ├── user
│ | ├── user_sign_up.py # blueprint
│ | ├── user_login.py # blueprint
│ ├── models.py # 数据库关系模型
│ └── view.py # 调用blueprint
├── config.py # 配置文件
├── createdb.py # 创建数据库
├── run.py # 主程序文件
├── requirements # 需求文件
└── README.md
app/__init__.py声明blueprint对象:
from flask import Blueprint
user_login = Blueprint('user_login', __name__)
from . import user_login
在app/views.py或者run.py注册:
from user_login import user_login
app.register_blueprint(user_login)
app.register_blueprint在这里进行了Blueprint对象的注册和路由,还有更多用法参考下面:
使用蓝图的模块化应用
解决跨域请求
在app/__init__.py加上CORS
from flask_cors import CORS
app = Flask(__name__)
CORS(app, supports_credentials=True)