Day7 --- 前后端分离与接口编写 一对多增删改查

编写模型类

在models目录中的model.py文件中

from flask_sqlalchemy import SQLAlchemy

db=SQLAlchemy()
分类表
class Classify(db.Model):
    id=db.Column(db.Integer,primary_key=True,autoincrement=True,comment='ID')
    name=db.Column(db.String(32),default='',comment='分类名称')
    mcd=db.relationship('Mcd',backref='classify')
#外键绑定
#服装表
class Mcd(db.Model):
    id=db.Column(db.Integer,primary_key=True,autoincrement=True,comment='ID')
    name=db.Column(db.String(32),comment='商品名')
    price=db.Column(db.DECIMAL(10,2),comment='价格')
    img=db.Column(db.String(500),comment='图片地址')
    classify_id=db.Column(db.Integer,db.ForeignKey('classify.id'))

进行迁移

#  初始化迁移文件  # 初始化,只需要初始化一次
python manage.py db init

# 生成迁移文件
python manage.py db migrate

# 执行迁移
python manage.py db upgrade

# 迁移完成

在蓝图中进行编写接口

from flask import Blueprint,jsonify,request
from flask_restful import Api,Resource,marshal,fields,reqparse #导入序列化器数据请求等
from models.mobel import Press,Sort,db #将model中的导包过来
news_dp=Blueprint('news_dp',__name__,url_prefix='/news')
api=Api(news_dp) #实例化蓝图

#分类表的增删改查
class Sortview(Resource):
    def post(self):  #添加数据
        rep=reqparse.RequestParser()
        rep.add_argument('name')
        args=rep.parse_args()
        s1=Sort(name=args['name'])
        db.session.add(s1)
        db.session.commit()
        return jsonify({
            'code':200,
            'msg':'添加成功'
        })
    def get(self):  #获取全部数据
        sort_info=Sort.query.all()
        slist=marshal(sort_info,{
            'id':fields.Integer,
            'name':fields.String
        })
        return jsonify({
            'code':200,
            'msg':'获取成功',
            'data':slist
        })
    def put(self):
        rep=reqparse.RequestParser()
        rep.add_argument('id')
        rep.add_argument('name')
        args=rep.parse_args()    #根据id进行修改
        sort_data=Sort.query.filter(Sort.id==args['id']).first()
        if not sort_data:
            return jsonify({
                'code':400,
                'msg':'数据不存在'
            })
        sort_data.name=args['name']
        db.session.commit()
        return jsonify({
            'code':200,
            'msg':'修改成功'
        })
    def delete(self):  #删除数据
        rep=reqparse.RequestParser()
        rep.add_argument('id')
        args=rep.parse_args()
        Sort.query.filter(Sort.id==args['id']).delete()
        db.session.commit()
        return jsonify({
            'code':200,
            'msg':'删除成功'
        })
#服装表的曾删改查
class PressView(Resource):
    def post(self):
        rep=reqparse.RequestParser()
        rep.add_argument('desc',type=str,required=True)
        rep.add_argument('media',type=str,required=True)
        rep.add_argument('comm',type=str,required=True)
        rep.add_argument('img',type=str,required=True)
        rep.add_argument('sort_id',type=int,required=True)
        args=rep.parse_args()
        p1=Press(
            desc=args['desc'],
            media=args['media'],
            comm=args['comm'],
            img=args['img'],
            sort_id=args['sort_id'],
        )
        #添加数据
        db.session.add(p1)
        db.session.commit()
        return jsonify({
            'code':200,
            'msg':'添加成功'
        })
    def get(self):
        rep=reqparse.RequestParser()
        rep.add_argument('id')
        args=rep.parse_args()        #根据绑定的id查询所有的数据
        pre_info=Press.query.filter(Press.sort_id==args['id']).all()
        if not pre_info:
            return jsonify({
                'code':200,
                'msg':'没有该分类'
            })
        plist=marshal(pre_info,{
            'desc':fields.String,
            'media':fields.String,
            'comm':fields.String,
            'img':fields.String,
        })
        return jsonify({
            'code':200,
             'msg':'获取成功',
            'data':plist
        })
    def put(self):
        rep = reqparse.RequestParser()
        rep.add_argument('id',type=int)
        rep.add_argument('desc', type=str)
        rep.add_argument('media', type=str)
        rep.add_argument('comm', type=str)
        rep.add_argument('img', type=str)
        rep.add_argument('sort_id', type=int)
        args = rep.parse_args()       #获取到需要修改的数据
        pre_info=Press.query.filter(Press.id==args['id']).first()
        if not pre_info:
            return jsonify({
                'code':400,
                'msg':'数据不存在'
            })
        if args['desc']:     #判断哪些数据需要修改哪些数据不用修改
            pre_info.desc=args['desc']
        if args['media']:
            pre_info.media=args['media']
        if args['comm']:
            pre_info.comm=args['comm']
        if args['img']:
            pre_info.img=args['img']
        if args['sort_id'] is not None:
            pre_info.sort_id=args['sort_id']
        db.session.commit()
        return jsonify({
            'code':200,
            'msg':'修改成功'
        })
    def delete(self):
        rep=reqparse.RequestParser()
        rep.add_argument('id')
        args=rep.parse_args()   #根据id删除对应的数据
        Press.query.filter(Press.id==args['id']).delete()
        db.session.commit()
        return jsonify({
            'code':200,
            'msg':'删除成功'
        })

api.add_resource(Sortview,'/cls')
api.add_resource(PressView,'/pre')

在crete_app中进行注册

from flask import Flask
from flask_cors import CORS  #跨域
from views.news import news_dp   #导入实例化的蓝图
from models.mobel import db  #导入数据库 db
def create_app(config):
    flack_app=Flask(__name__)

    #加载配置项
    flack_app.config.from_object(config)
    #注册蓝图
    flack_app.register_blueprint(news_dp)
    #绑定db
    db.init_app(flack_app)
    #跨域

    CORS(flack_app)

    return flack_app

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值