Day5 --- Flask-RESTful请求响应与SQLAlchemy基础

请求解析

RequestParser处理请求

在一应创建好的项目内

from flask import Flask
from views.user import user_bp #从蓝图文件里导入蓝图对象
# 创建Flask实例
app=Flask(__name__)
app.register_blueprint(user_bp) #注册蓝图

if __name__ == '__main__':
    app.run()

存放类的py文件

from flask import Blueprint, jsonify
# url_prefix  # 指定当前蓝图下所有路由的前缀
user_bp=Blueprint('user_bp',__name__,url_prefix='/user')

from flask_restful import Api,Resource,reqparse #请求器导包
api=Api(user_bp)
class Users(Resource):
    def get(self):
        #1.实例化请求器对象
        req=reqparse.RequestParser()
        # 2.添加想要的数据
        # required=True 必填    help提示信息
        req.add_argument('a',required=True,help='必填')
        # default默认为...
        req.add_argument('c',default='000')
        #3.校验数据
        args=req.parse_args()
        print(args)
        return 'sss'

api.add_resource(Users,'/users')

返回响应
在这里插入图片描述

在这里插入图片描述
req.add_argument(…)方法参数详解。里面还可加格外条件
例如

# 可选参数(部分)
        # type=int # 参数类型 
        # help="不可以为空"  # 错误提示  提示内容随意填写
        # required=True # True必须填写  Flase不用必须填写
        # action="append"  # 出现同名参数如何处理,append追加,store 保留第一个
        # choices=['男','女']  # 特定的值 只能写其中包含的
        # default=18  # 如果不传,默认值
        # type: 描述参数应该匹配的类型,可以使用python的标准类型: str或int

location: 描述参数应该在请求数据中出现的位置

# 请求体中
    parser.add_argument('name', type=int, location='form')

    # 查询参数中
    parser.add_argument('PageSize', type=int, location='args')

    # 请求头中
    parser.add_argument('User-Agent', location='headers')

    # cookie中
    parser.add_argument('session_id', location='cookies')

    # json数据中
    parser.add_argument('user_id', location='json')

    # 文件上传
    parser.add_argument('picture', location='files')
    
    # 指定多处
    parser.add_argument('text', location=['headers', 'json'])

序列化器

from flask import Blueprint,jsonify,request,json
from flask_restful import Api,Resource,marshal,fields
from models.mobel import Classify,Mcd,db
good_dp=Blueprint('good_dp',__name__,url_prefix='/goods')
api=Api(good_dp)
class GoodView2(Resource):
    def get(self):
        id=request.args.get('id')
        m_info=Mcd.query.filter(Mcd.classify_id==id).all()
        m_list=marshal(m_info,{
            'name': fields.String, #字符串
            'price': fields.Float, #浮点型
            'img': fields.String,
            'classify_id': fields.Integer, #整形
        })
        return jsonify({'code':200,'msg':'获取成功','goods':m_list})
api.add_resource(GoodView2,'/goos')

ORM与Flask-SQLAlchemy扩展

先创建数据库的配置项 链接数据库
安装Flask-SQLAlchemy
pip install flask-sqlalchemy
创建一个settings文件夹里创建config.py文件
在里面进行配置

#数据库配置项
class DefaultConfig:
    # 数据库类型+数据库操作引擎://用户名:密码@主机名:端口/数据库名
    SQLALCHEMY_DATABASE_URI='mysql+pymysql://root:mysql密码@127.0.0.1:3306/数据库名'

    SQLALCHEMY_TRACK_MODIFICATIONS = False  # 追踪数据的修改信号
    SQLALCHEMY_ECHO = True  # 是否在控制台打印输出sql语句

创建一个models文件夹里创建model.py文件用来编写模型类

from flask_sqlalchemy import SQLAlchemy #导包
db=SQLAlchemy() #实例化数据库对象 

# 创建一个模型类
# 要是一个模型类,必须继承db.Model
class UserModel(db.Model):
    id=db.Column(db.Integer,primary_key=True,autoincrement=True,comment='ID')
    name=db.Column(db.String(32),nullable=False,default='',comment='用户名')
    password=db.Column(db.String(64),nullable=False,default='',comment='密码')
    sex=db.Column(db.Boolean,nullable=False,default=True,comment='性别 0男,1女')

在实例化flask的py文件里进行加载配置及让flask项目和数据库对象产生关系

from flask import Flask
from views.user import user_bp #从蓝图文件里导入蓝图对象
from views.order import order_bp
from models.model import db    #导入实例化后的数据库对象
from settings.config import DefaultConfig
# 创建Flask实例
app=Flask(__name__)
app.register_blueprint(order_bp) #注册蓝图
app.config.from_object(DefaultConfig) # 加载配置
db.init_app(app)   #初始化app 让flask项目和数据库对象产生关系
if __name__ == '__main__':
    app.run()

在根目录创建一个manage.py文件进行迁移

from flask_script import Manager   #Manager类作业是把命令行运行该文件的时候,添加一些命令
from app import app   #导入app
from models.model import db  #导入实例化后的数据库对象
from flask_migrate import Migrate,MigrateCommand  # 导入迁移类和迁移命令类

manage=Manager(app)  #实例生成命令行的管理对象
migrate=Migrate(app,db)  #生成迁移对象 用于数据迁移
manage.add_command('db',MigrateCommand) #把迁移的命令添加到管理对象上面

# 注意编写好了要启动一下
if __name__ == '__main__':
    manage.run() #启动管理者

在python终端运行命令进行迁移

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

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

# 执行迁移
python manage.py db upgrade

# 迁移完成

增删改查操作
在order.py蓝图进行编写
增加

from flask import Blueprint
from flask_restful import Api,Resource,marshal,fields
from models.model import UserModel   #导入模型类
from models.model import db #导入实例化的数据库对象

order_bp=Blueprint('order_dp',__name__,url_prefix='/order')
api=Api(order_bp)

class OrderView(Resource):
    def get(self):
        #添加数据
        u1=UserModel(
            name='张三',
            password='123456',
            sex=False,
        )
        u2=UserModel(
            name='张四',
            password='123456',
            sex=True,
        )
        # db.session.add(u1) #添加一条数据
        db.session.add_all([u1,u2])  #添加多条
        #注意: 增加数据, 修改数据及删除数据均需要提交事务
        db.session.commit()
        return 'order_dp'
api.add_resource(OrderView,'/order')

查看数据

class OrderView(Resource):
    def get(self):
        #查看全部数据
        query_get=UserModel.query.all()
        print(query_get)
        #查看一条数据
        #query_get = UserModel.query.first()
        # ## 根据查询条件,查看数据
        # query_get=UserModel.query.filter_by(name='张三').first()
        return marshal(query_get,{
            'name':fields.String,
            'password':fields.String,
            'sex':fields.Integer
        })

修改数据
注意: 增加数据, 修改数据及删除数据均需要提交事务

class OrderView(Resource):
    def get(self):
        #修改数据
        UserModel.query.filter_by(name='张三').update({
            'sex':True    #要修改的内容
        })
        #注意: 增加数据, 修改数据及删除数据均需要提交事务
        db.session.commit()

删除数据
注意: 增加数据, 修改数据及删除数据均需要提交事务

class OrderView(Resource):
    def get(self):
    	#删除数据            #删除名字是张三的数据
        UserModel.query.filter_by(name='张三').delete()
        db.session.commit()

数据库的字段类型

Integer一个整数()
String (size)有长度限制的字符串(
) #记得要在括号里加限制长度
Text一些较长的 unicode 文本(
)
DateTime
表示为 Python datetime 对象的 时间和日期(****)
Float存储浮点值
Boolean存储布尔值
PickleType存储为一个持久化的 Python 对象
LargeBinary存储一个任意大的二进制数据

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值