美文网首页
flask model convert dict

flask model convert dict

作者: wuyuan0127 | 来源:发表于2023-07-07 11:51 被阅读0次

    1. 编写 Model 转 json 工具类  jsonutil.py

    from sqlalchemy.ormimport class_mapper

        def obj2dict(model):

            columns = [c.keyfor cin class_mapper(model.__class__).columns]

            return dict((c,getattr(model, c))for cin columns)

    排除字段版本:

    def obj2dict(model, exclude_columns=None):

    if exclude_columnsis None:

    exclude_columns = []

    columns = [c.keyfor cin class_mapper(model.__class__).columnsif c.keynot in exclude_columns]

    return dict((c,getattr(model, c))for cin columns)

    2 . 编写 整合db  extend.py

    from flask_sqlalchemyimport SQLAlchemy

    db = SQLAlchemy()

    3. 编写 model.py

    from extendimport db

    class User(db.Model):

    __tablename__ ="user"

        id = db.Column(db.Integer,primary_key=True,autoincrement=True)

    # varchar, null=0

        username = db.Column(db.String(100),nullable=False)

    password = db.Column(db.String(100),nullable=False)

    email = db.Column(db.String(100))

    signature = db.Column(db.String(100))

    class Article(db.Model):

    __tablename__ ="article"

        id = db.Column(db.Integer,primary_key=True,autoincrement=True)

    title = db.Column(db.String(200),nullable=False)

    content = db.Column(db.Text,nullable=False)

    # 添加作者的外键

        author_id = db.Column(db.Integer, db.ForeignKey("user.id"))

    # backref:会自动的给User模型添加一个articles的属性,用来获取文章列表

        author = db.relationship("User",backref="articles")

    4. 定义 dto 【使用 pydantic】

    from typingimport Optional

    from pydanticimport BaseModel

    class UserModel(BaseModel):

    id: Optional[int] =None

        username:str

        password:str

        email: Optional[str] =None

        signature: Optional[str] =None

    5. 编写 app.py

    from flaskimport Flask, jsonify

    from flask.viewsimport MethodView

    from flask_pydanticimport validate

    from jsonutilimport obj2dict

    from modelimport *

    from modeldtoimport UserModel

    app = Flask(__name__)

    app.config['SQLALCHEMY_DATABASE_URI'] ='mysql://root:123456@127.0.0.1:3306/sqlalchemy_test'

    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] =True

    db.init_app(app)

    # with app.app_context():

    #    db.create_all()

    @app.route('/')

    def hello_world():# put application's code here

        return 'Hello World!'

    class UserAPI(MethodView):

    def get(self,user_id):

    users = User.query.all()

    return jsonify({'code':"200",'data': [obj2dict(user)for userin users]})

    @validate()

    def post(self, body: UserModel):

    print(body.dict())

    user = User(**body.dict())

    db.session.add(user)

    db.session.commit()

    return jsonify(obj2dict(user))

    user_view = UserAPI.as_view('user_api')

    app.add_url_rule('/users/',defaults={'user_id':None},

    view_func=user_view,methods=['GET', ])

    app.add_url_rule('/users/',view_func=user_view,methods=['POST', ])

    app.add_url_rule('/users/<int:user_id>',view_func=user_view,

    methods=['GET','PUT','DELETE'])

    if __name__ =='__main__':

    app.run(debug=True)

    相关文章

      网友评论

          本文标题:flask model convert dict

          本文链接:https://www.haomeiwen.com/subject/wsarudtx.html