本文共 3154 字,大约阅读时间需要 10 分钟。
- project - user - helpers.py - views.py - migrations - __init__.py - blueprint.py - bootstrap.py - models.py
路径 | 功能 |
---|---|
user/ | 资源或者模块,此处为用户模块 |
migrations | 数据库迁移文件 |
user/views.py | 处理对资源的请求(如GET,POST) |
user/helpers.py | 模块涉及到的辅助函数 |
__init__.py | 初始化Flask app |
路由 | |
app的启动 | |
数据库实体的对象 |
初始化Flask app
# __init__.pyfrom flask import Flaskapp = Flask(__name__)
路由注册
使用两种包
# user/views.py@blueprint.route('/password', methods=['PUT'])def update_password(): form = request.get_json(True, True) user_id = auth_helper() new_pass = form.get("password") if not new_pass: return jsonify(error="密码不能为空"), 400 new_pass = encrypt_helper(new_pass) User.patch(user_id=user_id, password=new_pass) cookie = request.cookies session_id = cookie.get('fat-wallet') session.pop(session_id) return jsonify(data="ok"), 200
# user/views.pyclass UserResource(Resource): def get(self): student_id = request.args.get("student_id") username = request.args.get("username") offset = request.args.get("offset") limit = request.args.get("limit") users = User.get(student_id=student_id, username=username, offset=offset, limit=limit) result = [{ "user_id": user.id, "student_id": user.student_id, "username": user.username, "major": user.major, "email": user.email, "phone": user.phone, "avatar": user.avatar.decode() if user.avatar else None} for user in users] return dict(data=result, count=len(result)), 200
为app注册以上两种路由
# blueprint.pyfrom backend.user.views import blueprint as user_blueprintfrom backend.user.views import UserResourcedef setup(app): api = Api(app) app.register_blueprint(user_blueprint, url_prefix='/users') api.add_resource(UserResource, '/users/')
定义映射数据库的对象,通过对象操作数据
# models.pyapp.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:admin@mysql/money'db = SQLAlchemy(app)migrate = Migrate(app, db)class MyMixin(object): __table_args__ = { 'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8mb4', }class User(db.Model, MyMixin): __tablename__ = 'users' id = db.Column(BIGINT(unsigned=True), primary_key=True) student_id = db.Column(db.String(10), unique=True) username = db.Column(db.String(20), unique=True, nullable=False) password = db.Column(db.String(40), nullable=False) major = db.Column(db.String(20)) email = db.Column(db.String(30), unique=True) phone = db.Column(db.String(20), unique=True) avatar = db.Column(db.LargeBinary(2**21 - 1)) # 2M
# 通过model操作数据 user = User(username=username, password=pass_md5, email=email) db.session.add(user) db.session.commit()
使用flask_migrate管理数据的迁移
flask db init # 初始化(生成migrations文件夹)flask db migrate -m "msg" # 根据当前的model生成迁移文件, 可添加信息flask db upgrade id # 根据生成的迁移文件更新数据库表结构, id为指定的迁移版本,可以为head,表示最新的flask db history # 查看迁移历史
运行项目
# debug modeflask run --host=0.0.0.0
转载地址:http://ewwob.baihongyu.com/