当前位置:网站首页>Day5 --- Flask-RESTful请求响应与SQLAlchemy基础
Day5 --- Flask-RESTful请求响应与SQLAlchemy基础
2022-07-27 05:02:00 【qishaoawei】
请求解析
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存储一个任意大的二进制数据
边栏推荐
猜你喜欢

How to store the startprocessinstancebykey method in acticiti in the variable table

Database design - relational data theory (ultra detailed)

简化JDBC的MyBits框架

ERROR! MySQL is not running, but PID file exists

Explore the mysteries of the security, intelligence and performance of the universal altek platform!

Flask的使用

JVM Part 1: memory and garbage collection part 3 - runtime data area - overview and threads

JVM上篇:内存与垃圾回收篇六--运行时数据区-本地方法&本地方法栈

pyside2____ 1. Installation and case listing

用户的管理-限制
随机推荐
JVM Part 1: memory and garbage collection -- runtime data area 4 - program counter
Shell course summary
Database connection pool & Druid usage
B1022 a+b in d-ary
B1031 check ID card
B1027 print hourglass
pytorch中几个难理解的方法整理--gather&squeeze&unsqueeze
通用视图,DRF视图回顾
B1030 完美数列
弹球小游戏
用pygame自己动手做一款游戏01
LeetCode之268.Missing number
JWT认证及登录功能实现,退出登录
Localdatetime and zoneddatetime
B1025 反转链表*******
JVM Part 1: memory and garbage collection part 6 -- runtime data area local method & local method stack
DBUtils
How to store the startprocessinstancebykey method in acticiti in the variable table
Differences among bio, NiO and AIO
事务,订单系统添加事务