AI+学习python、mysql、fastAPI制作后端API

最近在杭州学习ai大模型,学习了一个月,学会了如何用python制作fastAPI,前端按老师讲的用cursor写的,用的vue框架;今天做个学习笔记。

1、写后端fastAPI

整理思路,创建项目products,有db,app,model三个文件夹。
首先写model,使用pydantic库的BaseModel,分别写每个table的Request类和Response类,按照对应数据库的字段写每个属性的类型。
db写基础数据库的连接信息,如下:

import pymysql

def getConnection():
    conn=pymysql.connect(
        host='localhost',
        port=3306,
        user='root',
        password='123456',
        db='db_test',
        charset='utf8',
        autocommit=True,
        cursorclass=pymysql.cursors.DictCursor)
    return conn

他的意思是使用的自己系统安装的mysql,端口为3306,用户名,密码,用哪个数据库,编码格式,写sql语句自动提交,返回字段强制转换为dict字典格式。

它介绍了我的后端数据库信息,使用的是windows10系统安装的mysql(问了第二阶段的新老师,找到的windows安装包)。

然后写app,这个是路由的意思:

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from app import productsRouter, categoriesRouter, usersRouter, ordersRouter, orderItemsRouter
app=FastAPI(
    title="商品",
    description="商品API",
    version="0.1.0"
)
app.add_middleware(
    CORSMiddleware,
    allow_origins=["http://localhost:5173", "http://127.0.0.1:5173"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)
app.include_router(productsRouter.router,prefix="/api/products",tags=["商品"])
app.include_router(categoriesRouter.router,prefix="/api/categories",tags=["商品分类"])
app.include_router(usersRouter.router,prefix="/api/users",tags=["用户"])
app.include_router(ordersRouter.router,prefix="/api/orders",tags=["订单"])
app.include_router(orderItemsRouter.router,prefix="/api/order_items",tags=["订单明细"])
@app.get("/")
def read_root():
    return {"message": "Hello World"}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run('main:app', host="127.0.0.1", port=8000, reload=True)

这段的意思就是后端的开启文件,中间app.include_router语句是链接要写的数据表的操作路由,每个代表一个表的增删改查操作。
我例举一个:

from fastapi import APIRouter,Depends
from db.database import getConnection
from model.categories import CategoriesRequest, CategoriesResponse

router=APIRouter()

# 添加商品分类
@router.post('/add_categories')
def add_categories(categories:CategoriesRequest,conn=Depends(getConnection)):
    with conn.cursor() as cursor:
        sql="""
        insert into categories(
            category_id,
            category_name, 
            parent_category_id, 
            description
        )values(%s,%s,%s,%s)
        """
        params = categories.to_tuple()
        cursor.execute(sql, params)
        cursor.execute('select * from categories where category_id=%s', (categories.category_id,))
        result = cursor.fetchone()
    conn.close()
    return result

# 获取单个商品分类
@router.get('/get_categories')
def get_categories(category_id:str,conn=Depends(getConnection)):
    with conn.cursor() as cursor:
        sql="select * from categories where category_id=%s"
        cursor.execute(sql, (category_id,))
        result = cursor.fetchone()
    conn.close()
    return result

# 根据商品分类id删除对应商品分类,返回删除成功
@router.delete('/delete_categories')
def delete_categories(category_id:str,conn=Depends(getConnection)):
    with conn.cursor() as cursor:
        sql="delete from categories where category_id=%s"
        cursor.execute(sql, (category_id,))
    conn.close()
    return {"message": "删除成功"}

# 输入商品分类名称,页码,每页大小,显示商品分类信息
@router.get('/get_categories_by_name')
def get_categories_by_name(category_name:str,page:int=1,page_size:int=10,conn=Depends(getConnection)):
    offset = (page - 1) * page_size
    with conn.cursor() as cursor:
        sql="""
            select * from categories 
            where category_name like %s 
            limit %s,%s
            """
        cursor.execute(sql,("%"+category_name+"%",offset,page_size))
        result = cursor.fetchall()
    conn.close()
    return {"categories": result}  # Changed from return result to   return {"categories": result}

# 修改商品分类信息,返回修改了的商品分类信息,parent_category_id 字段可以为空
@router.put('/update_categories')
def update_categories(categories:CategoriesRequest,conn=Depends(getConnection)):
    with conn.cursor() as cursor:
        sql="""
        update categories set
            category_name=%s, 
            parent_category_id=%s, 
            description=%s
        where category_id=%s
        """
        params = (
            categories.category_name,
            categories.parent_category_id,
            categories.description,
            categories.category_id)
        cursor.execute(sql, params)
        cursor.execute('select * from categories where category_id=%s', (categories.category_id,))
        result = cursor.fetchone()
    conn.close()
    return result


不知道写的好不好,用pycharm写的,我自己是可以读懂,当然也用了安装的CN插件(现在大概都要用,快!)。

然后就是测试
在这里插入图片描述
这是fastAPI自带的测试界面。
我自己写了两个表的分路由信息(都是繁琐的重复操作,第一次也容易出错)。
然后打开cusor写前端,这里不得不提一嘴,现在的代码工具真强大!


当然他这里要先安装一个工具node.js,我也不知道是做什么的,有懂行的可以教教我,反正老师说得安装一个,不然没法运行vue框架。
安装这里教的前后端步骤打开:
在这里插入图片描述
然后让他把剩下的后端分路由API写了,在接上前端:
在这里插入图片描述
如图,最后的结果就出来了,自己写一个小系统,成就感满满!!
在这里插入图片描述
感谢,能看到这里,接下来我们会学习第二阶段的大模型知识!!
有时间的话我会继续分享。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐