flask restframework api增删改查询

最近学习了flask-script和flask-manage
话不多说先上组织flask项目组织架构图,这里是模仿了django模型相关框架,因为学习过django所以还是喜欢熟悉一点界面
在这里插入图片描述
这里按照django模式为每个模块单独定义一个包,例如本次做测试的crm包
一开始很困扰的是数据定义,如果放在manager或者__init__.py中,会照成循环引用的问题,然后后期可能会出现种种问题,所以这里做了一个中间件ext.py文件
内容如下:

from flask_sqlalchemy import  SQLAlchemy
db=SQLAlchemy()

这句话含义创建一个SQLAlchemy实例
manage.py内容

from s1pro_flask import create_app,current_app,g,SQLAlchemy
from s1pro_flask import  Api,Resource,Manager,MigrateCommand,Shell,Migrate
from ext import  db
from crm.models import  User
app=create_app()
db.init_app(app)
migrate = Migrate(app,db)
manager=Manager(app)
manager.add_command('db',MigrateCommand)
def make_shell_context():
    return dict(app=app, db=db)
manager.add_command("shell",Shell(make_context=make_shell_context))
if __name__=='__main__':
    manager.run()

crm.models的代码:

from ext import db
class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer,primary_key=True)
    username = db.Column(db.String(64),index=True,unique=True)
    email = db.Column(db.String(120),index=True,unique=True)
    realname=db.Column(db.String(60))
    password_hash = db.Column(db.String(128))

    def __repr__(self):
        return '<用户名:{}>'.format(self.username)

这样就不会产生回调问题
s1pro_flask的__init__.py文件内容

from flask import  Flask,current_app,g
from flask_script import Manager,Shell
from flask_sqlalchemy import  SQLAlchemy
from flask_restful import  Api,Resource
from flask_migrate import  Migrate,MigrateCommand
from  s1pro_flask.views import  account
from crm.views import  crm

def create_app():
    app=Flask(__name__)
    app.config.from_object('settings.DevelopmentConfig')
    # print(app.config['SECRET_KEY'])
    app.register_blueprint(account.ac)
    app.register_blueprint(crm)

    return app

上面的代码编写完成之后:就可以使用python manage.py脚本
在这里插入图片描述
可以采用runserver,也可以采用db
python manage.py db init --生成migrations文件夹
python manage.py db migrate–生成脚本文件,类似于django的make migrations
python manage.py db upgrade–脚本文件直接应用数据库中
至此我们的user表已经生成了,接下来就是使用类似于restframework的api接口来进行数据增删改查,这里偷懒了没有写前端,直接使用了postman来进行增删改查模拟操作
mysql中表数据如下
在这里插入图片描述
直接上api接口内容

from flask import Blueprint,jsonify,request
from flask_restful import  Api,Resource,fields,marshal_with
from .models import User
from ext import  db
crm=Blueprint('crm',__name__)
api=Api(crm)
class UserResource(Resource):
    resource_fields = {
        'id':fields.Integer,
        'username': fields.String,
        'email': fields.String,
        'password_hash': fields.String,
        'realname':fields.String
    }
    @marshal_with(resource_fields,envelope='全部用户详情')
    def get(self):
        res=db.session.query(User).all()
        return  res
    def post(self):
        username = request.form.get('username')
        email = request.form.get('email')
        realname = request.form.get('realname')
        uo=User(**{'username':username,'email':email,'realname':realname})
        db.session.add(uo)
        db.session.commit()
        return  {'userpost':f'添加用户{username}成功'}
    def put(self):
        # print(request.form.get('id'))
        id=request.form.get('id')
        username=request.form.get('username')
        # print(f"{id}{username}")
        realname=request.form.get('realname')
        uo=User.query.get(id)
        uo.username=username
        uo.realname=realname
        db.session.add(uo)
        db.session.commit()
        return  {'userput':f'用户{username}更新成功'}
    def delete(self):
        id = request.form.get('id')
        uo=User.query.get(id)
        db.session.delete(uo)
        db.session.commit()
        return  {'userdelete':f'删除用户{id}成功'}

class RoleResource(Resource):
    def get(self):
        return {'roleget':'hello restful'}
    def post(self):
        return {'rolepost':'hello restful'}
    def put(self):
        return  {'roleput':'hello restful'}
    def delete(self):
        return  {'roledelete':'hello restful'}

api.add_resource(UserResource,'/user')
api.add_resource(RoleResource,'/role')

get
在这里插入图片描述
post
在这里插入图片描述
mysql数据库
在这里插入图片描述
put
在这里插入图片描述
在这里插入图片描述
delete
在这里插入图片描述
在这里插入图片描述

注意事项:
flask目前还没有类似于restframwork的listmixin,updatemixin…可以结合generviewset的简单获取model的序列化数据,所以有了fields,marshal_with这两个功能,主要是起序列化的作用,envelope='全部用户详情’为返回结果序列化字典key值
一个简单的restframework的api到此结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值