结构订单模型
在之前的教程中,咱们现已完成了订单随机数据的生成了,在本教程中,咱们将完成订单数据模型和订单数据接口,并向数据库中刺进1w条随机数据,用于在前端进行测验。
咱们的库满足强壮,看上去这个需求比较复杂,可是实际上只需要几行代码就能够处理。
跟着咱们的教程往下看,你就知道该怎么完成了。
运用zdppy_orm生成订单模型
首要看一下完好代码:
import logging
import zdppy_env
from zdppy_orm import *
from zdppy_orm.model import MysqlDatabase, SoftDeleteModel
# 创立日志目标
logger = logging.getLogger("zdppy_orm")
logger.setLevel(logging.DEBUG)
logger.addHandler(logging.StreamHandler())
# 创立数据库衔接
# 从环境变量读取
zdppy_env.load()
AUTH_DATABASE = zdppy_env.get("AUTH_DATABASE") # 数据库
AUTH_HOST = zdppy_env.get("AUTH_HOST") # 主机地址
AUTH_USER = zdppy_env.get("AUTH_USER") # 用户名
AUTH_PASSWORD = zdppy_env.get("AUTH_PASSWORD") # 暗码
if not AUTH_DATABASE:
raise "从环境变量加载 AUTH_DATABASE 失利"
if not AUTH_HOST:
raise "从环境变量加载 AUTH_HOST 失利"
if not AUTH_USER:
raise "从环境变量加载 AUTH_USER 失利"
if not AUTH_PASSWORD:
raise "从环境变量加载 AUTH_PASSWORD 失利"
db = MysqlDatabase(AUTH_DATABASE, host=AUTH_HOST,
user=AUTH_USER, passwd=AUTH_PASSWORD)
class BaseModel(SoftDeleteModel):
class Meta:
database = db # 这里是数据库链接,为了便利树立多个表,能够把这个部分提炼出来构成一个新的类
class Order(BaseModel):
"""订单模型"""
name = IntegerField(default=0) # 0一般订单 1秒杀订单
price = DecimalField(null=False)
buyer = CharField(default="")
time = DateTimeField()
role = BooleanField(default=False)
state = BooleanField(default=False)
payType = BooleanField(default=False)
source = CharField(max_length=255, default="")
phone = CharField(max_length=11, default="")
class Meta:
table_name = 'order'
def init_auth_db():
db.connect()
db.drop_tables([Order])
db.create_tables([Order])
if __name__ == "__main__":
init_auth_db()
订单模型的中心代码如下,和之前咱们生成的随机数据结构保持一致:
class Order(BaseModel):
"""订单模型"""
name = IntegerField(default=0) # 0一般订单 1秒杀订单
price = DecimalField(null=False)
buyer = CharField(default="")
time = DateTimeField()
role = BooleanField(default=False)
state = BooleanField(default=False)
payType = BooleanField(default=False)
source = CharField(max_length=255, default="")
phone = CharField(max_length=11, default="")
class Meta:
table_name = 'order'
初始化订单模型包含创立表,生成表,中心代码如下:
def init_auth_db():
db.connect()
db.drop_tables([Order])
db.create_tables([Order])
文章字数有限,详细细节假如咱们想要了解的话,能够打赏今后获取安装包进行学习,也能够报名跟我学习的哈。
批量刺进数据
接下来咱们批量刺进100条数据,咱们看看有简略,向数据库刺进1w条数据只需要如下几行代码:
data = zdppy_random.random_list_dict({
"name": "int(0,2)",
"price": "int(20,501)",
"buyer": "name",
"time": "date",
"role": "bool",
"state": "bool",
"payType": "bool",
"source": "url",
"phone": "phone",
}, size=10000)
zdppy_orm.insert_many(db, data, Order)
查询订单数据
咱们来看看怎么查询订单数据,非常的简略:
for v in Order.select().dicts()[:20]:
print(v)
编写订单接口
来到今日最重要的内容了,运用咱们的zdppy_api库开发一个订单接口,完好代码如下:
import logging
import zdppy_env
from zdppy_api import Api, Group, Depends, ResponseData
from zdppy_api_auth import auth_group, verify_token
from zdppy_orm import *
from zdppy_orm.model import MysqlDatabase, SoftDeleteModel
# 加载环境变量
zdppy_env.load()
# 创立日志目标
logger = logging.getLogger("zdppy_orm")
logger.setLevel(logging.DEBUG)
logger.addHandler(logging.StreamHandler())
# 创立数据库衔接
# 从环境变量读取
zdppy_env.load()
AUTH_DATABASE = zdppy_env.get("AUTH_DATABASE") # 数据库
AUTH_HOST = zdppy_env.get("AUTH_HOST") # 主机地址
AUTH_USER = zdppy_env.get("AUTH_USER") # 用户名
AUTH_PASSWORD = zdppy_env.get("AUTH_PASSWORD") # 暗码
if not AUTH_DATABASE:
raise "从环境变量加载 AUTH_DATABASE 失利"
if not AUTH_HOST:
raise "从环境变量加载 AUTH_HOST 失利"
if not AUTH_USER:
raise "从环境变量加载 AUTH_USER 失利"
if not AUTH_PASSWORD:
raise "从环境变量加载 AUTH_PASSWORD 失利"
db = MysqlDatabase(AUTH_DATABASE, host=AUTH_HOST,
user=AUTH_USER, passwd=AUTH_PASSWORD)
class BaseModel(SoftDeleteModel):
class Meta:
database = db # 这里是数据库链接,为了便利树立多个表,能够把这个部分提炼出来构成一个新的类
class Order(BaseModel):
"""订单模型"""
name = IntegerField(default=0) # 0一般订单 1秒杀订单
price = DecimalField(null=False)
buyer = CharField(default="")
time = DateTimeField()
role = BooleanField(default=False)
state = BooleanField(default=False)
payType = BooleanField(default=False)
source = CharField(max_length=255, default="")
phone = CharField(max_length=11, default="")
class Meta:
table_name = 'order'
# 创立运用
app = Api(cors_config={})
order_group = Group()
@order_group.get("/", dependencies=[Depends(verify_token)])
async def get_order(page: int = 1, size: int = 20):
order_list = Order.select().order_by(-Order.id).paginate(page, size).dicts()
response = ResponseData()
response.data = list(order_list)
return response
v1 = Group()
v1.add_group(auth_group, prefix="/auth")
v1.add_group(order_group, prefix="/order")
app.add_group(v1, prefix="/v1")
if __name__ == "__main__":
db.connect()
import uvicorn
# http://localhost:8889/docs
uvicorn.run(, reload=True,
host="0.0.0.0", port=8889)
其间大部分都是咱们之前学过的内容,中心代码如下:
@order_group.get("/", dependencies=[Depends(verify_token)])
async def get_order(page: int = 1, size: int = 20):
order_list = Order.select().order_by(-Order.id).paginate(page, size).dicts()
response = ResponseData()
response.data = list(order_list)
return response
咱们运用zdppy_orm结构,分页查询到列表数据,并传递给前端。zdppy_api结构还给咱们供给了一个快捷的接口文档,便于咱们调试,咱们在接口文档中恳求订单接口,成果如下:
呼应成果如下:
总结
在实在的开发中,往往有运用纯SQL操作和运用ORM结构两种挑选,我个人是比较喜爱直接操作SQL的,可是不得不说,在封装许多结构,在快速开发中,运用ORM结构能够让咱们事半功倍,咱们只需要专心于事务逻辑即可。
有了这些底层库今后,咱们要做开发就变得非常简略了。
现在,订单接口现已开发好了,接下来是时分回到前端,去持续开发前端页面了。