flask 目录架构
git地址
1 | https://github.com/Hughendman/flask-program |
目录结构
1 | | - projectName |
启动命令
1 | python manage.py runserver -p 9033 |
自动生成Sqlalchemy的models文件
安装sqlacodegen
1 | pip install sqlacodegen |
使用
1 | sqlacodegen mysql://root:abcd234@localhost:3306/superset_board?charset=utf8mb4 > models.py |
开发文档
开发接口
1 | | - projectName |
auth/init.py1
2
3
4
5from flask import Blueprint
auth = Blueprint('auth', __name__)
from .users import *
auth/users.py
1 | from flask import jsonify |
app/init.py
1 | # 增加auth蓝本 |
数据库配置
config.py1
2
3
4class DevelopmentConfig(Config):
DEBUG = True
SQLALCHEMY_DATABASE_URI = 'mysql://root:abcd234@localhost:3306/superset_board?charset=utf8mb4'
SQLALCHEMY_TRACK_MODIFICATIONS = True
采用的SQLAlchemy,
处理json
models/models.py1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25def default(self, obj):
if isinstance(obj.__class__, DeclarativeMeta):
# an SQLAlchemy class
fields = {}
for field in [x for x in dir(obj) if not x.startswith('_') and x != 'metadata']:
data = obj.__getattribute__(field)
try:
json.dumps(data) # this will fail on non-encodable values, like other classes
fields[field] = data
except TypeError:
if isinstance(data, datetime.datetime):
fields[field] = data.isoformat()
elif isinstance(data, datetime.date):
fields[field] = data.isoformat()
elif isinstance(data, datetime.timedelta):
fields[field] = (datetime.datetime.min + data).time().isoformat()
else:
fields[field] = None
if "query" in fields:
del fields["query"]
if "query_class" in fields:
del fields["query_class"]
# a json-encodable dict
return fields
return json.JSONEncoder.default(self, obj)
跨域处理
安装
使用
1 | from flask_cors import CORS |
集成前端
1 | app = Flask(__name__, |
自动生成依赖包
1 | pip freeze > requirements.txt |
安装依赖包
1 | pip install -r Requirements.txt |
版本
10-18 first commit
10-22 mysqldb commit