from flask import Flask, request
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow
from flask_migrate import Migrate
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = '<db_url>'
db = SQLAlchemy(app)
ma = Marshmallow()
ma.init_app(app)
migrate = Migrate(app, db)
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
post_title = db.Column(db.String(120), nullable=False)
post_content = db.Column(db.Text, nullable=False)
class Note(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(64), comment="标题", nullable=True)
content = db.Column(db.String(128), comment="内容", nullable=True)
href = db.Column(db.String(160), comment="链接", nullable=True)
desc = db.Column(db.String(128), comment="描述", nullable=True)
post_id = db.Column(db.Integer, db.ForeignKey('post.id', use_alter=True), nullable=True)
post = db.relationship('Post', foreign_keys=post_id, backref=db.backref('notes', lazy=True))
class PostSchema(ma.SQLAlchemyAutoSchema):
class Meta:
model = Post
class NoteSchema(ma.SQLAlchemyAutoSchema):
post = ma.Nested(PostSchema)
class Meta:
model = Note
include_fk = True
note_schema = NoteSchema()
notes_schema = NoteSchema(many=True)
post_schema = PostSchema()
@app.route('/note/')
def note_list():
all_notes = Note.query.all()
return notes_schema.jsonify(all_notes)
@app.route('/note/', methods=['POST'])
def create_note():
title = request.json.get('title', '')
content = request.json.get('content', '')
note = Note(title=title, content=content)
db.session.add(note)
db.session.commit()
return note_schema.jsonify(note)
if __name__ == '__main__':
app.run(debug=True)
flask db init
flask db migrate
flask db upgrade