lxwbite 2 hónapja
szülő
commit
f97532fd70

+ 20 - 1
1fastapi.py

@@ -1,8 +1,12 @@
 # 导入FastAPI静态文件挂载模块,用于托管图片、css、js等静态资源
 from fastapi.staticfiles import StaticFiles
 from fastapi.templating import Jinja2Templates
+from tortoise.contrib.fastapi import register_tortoise
+from settings import TORTOISE_ORM
 # 导入FastAPI核心实例、Request请求对象(用于接收请求参数)
 from fastapi import FastAPI, Request
+from fastapi.middleware.cors import CORSMiddleware
+
 
 # 导入uvicorn ASGI异步web服务器,用来运行FastAPI项目
 import uvicorn
@@ -12,9 +16,25 @@ from api.book import api_book
 from api.cbs import api_cbs
 from api.zz import api_zz
 
+
+
 # 实例化FastAPI应用程序核心对象
 app = FastAPI()
 
+app.add_middleware(
+    CORSMiddleware,
+    # allow_origins=origins,  # *: 代表所有客户端
+    allow_origins=["*"],  # *: 代表所有客户端
+    allow_credentials=True,
+    allow_methods=["GET"],
+    allow_headers=["*"],
+)
+
+register_tortoise(
+    app=app,
+    config=TORTOISE_ORM,
+)
+
 # 挂载静态资源目录
 # path:浏览器访问URL前缀;directory:本地存放静态文件的文件夹;name:内部标识名
 # 访问示例:http://127.0.0.1:8000/upimg/img.png 即可直接读取upimg文件夹下的img.png图片
@@ -87,4 +107,3 @@ async def jinjia2templates(request: Request):
         }
     )
 
-

BIN
__pycache__/1fastapi.cpython-313.pyc


BIN
__pycache__/models.cpython-313.pyc


BIN
__pycache__/settings.cpython-313.pyc


BIN
api/__pycache__/cbs.cpython-313.pyc


+ 24 - 3
api/cbs.py

@@ -1,10 +1,31 @@
 from fastapi import APIRouter
+from models import Publish
 
 api_cbs = APIRouter()
 
-@api_cbs.get("/get")
-async def get_test():
-    return {"method": "get method"}
+@api_cbs.get("/")
+async def getAllPublish():
+    # 这是 list 对象
+    publish_obj = await Publish.all()
+    print(publish_obj)
+    # 这是 queryset 对象
+    # publish_obj = Publish.all()
+
+    # filter
+    # users = await User.filter(name=name).all()
+
+    # get
+    # user = await User.get(id=user_id)
+
+    # order_by
+    # users = await User.all().order_by('name')
+
+    # limit
+    # users = await User.all().limit(limit)
+
+    # print(publish_obj)
+    # return {'code': 200, 'data': publish_obj}
+    return {"message": "Hello cbs"}
 
 @api_cbs.post("/post")
 async def post_test():

+ 67 - 0
migrations/models/0_20260615184211_init.py

@@ -0,0 +1,67 @@
+from tortoise import BaseDBAsyncClient
+
+RUN_IN_TRANSACTION = True
+
+
+async def upgrade(db: BaseDBAsyncClient) -> str:
+    return """
+        CREATE TABLE IF NOT EXISTS `author` (
+    `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
+    `name` VARCHAR(32) NOT NULL,
+    `age` INT NOT NULL
+) CHARACTER SET utf8mb4;
+CREATE TABLE IF NOT EXISTS `publish` (
+    `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
+    `name` VARCHAR(32) NOT NULL,
+    `email` VARCHAR(32) NOT NULL
+) CHARACTER SET utf8mb4;
+CREATE TABLE IF NOT EXISTS `book` (
+    `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
+    `title` VARCHAR(32) NOT NULL,
+    `price` INT NOT NULL,
+    `img_url` VARCHAR(255),
+    `bread` INT NOT NULL,
+    `bcomment` INT NOT NULL,
+    `publishs_id` INT NOT NULL,
+    CONSTRAINT `fk_book_publish_8999eb74` FOREIGN KEY (`publishs_id`) REFERENCES `publish` (`id`) ON DELETE CASCADE
+) CHARACTER SET utf8mb4;
+CREATE TABLE IF NOT EXISTS `aerich` (
+    `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
+    `version` VARCHAR(255) NOT NULL,
+    `app` VARCHAR(100) NOT NULL,
+    `content` JSON NOT NULL
+) CHARACTER SET utf8mb4;
+CREATE TABLE IF NOT EXISTS `book_author` (
+    `book_id` INT NOT NULL,
+    `author_id` INT NOT NULL,
+    FOREIGN KEY (`book_id`) REFERENCES `book` (`id`) ON DELETE CASCADE,
+    FOREIGN KEY (`author_id`) REFERENCES `author` (`id`) ON DELETE CASCADE,
+    UNIQUE KEY `uidx_book_author_book_id_818352` (`book_id`, `author_id`)
+) CHARACTER SET utf8mb4 COMMENT='作者';"""
+
+
+async def downgrade(db: BaseDBAsyncClient) -> str:
+    return """
+        """
+
+
+MODELS_STATE = (
+    "eJztmW1P2zAQgP8K6icmdVMp7UD7lnZDY4wXAZsmAYqcxE2tOnZwnEGF8t9nOy9OkzQ05a"
+    "2s/VLa813se3K+85mHlkcdiINPRsjHlLW+bD20CPCg+FIYaW+1gO9ruRRwYGGlCrSOFXAG"
+    "bC6kI4ADKEQODGyGfI4oEVISYiyF1BaKiLhaFBJ0G0KTUxfyMZRruboRYkQceA+D9Kc/MU"
+    "cIYmdmqciRcyu5yae+kh0SfqAU5WyWaVMcekQr+1OxZJJpI8Kl1IUEMsChfDxnoVy+XF3i"
+    "Z+pRvFKtEi8xZ+PAEQgxz7m7IAObEslPrCZQDrpylo/dnd5eb3/3c29fqKiVZJK9KHZP+x"
+    "4bKgInl61IjQMOYg2FUXNTf0vkhmPAqtGl+gV4YslFeCmqOnqpQOPTIfNM/Dxwb2JIXD4W"
+    "P3e7NbB+G+fD78b59m73g/SFiiCOY/skGemqIclT8wNuBb65gZdoPx55KwLvGYJP7tjRJB"
+    "d7UmABe3IHmGOWRmiXztMtD3ldrzKoLUonQfm1HAMyvaTyU72dQ+ErIHbVG0kS30A8Z5k3"
+    "s2RSaF2HvVHfvg73O51+a6E3FKURlkr1ZMoHs5DKU48YxNKfbDhO3zEzyhTuCZymLM04YW"
+    "ZvIhmKjZJBPmY0dMeZiS4IgquYG/I4sxgXQ+PrNyk3i6lWxYoHiNglTuJx1J5dekV1Sl2a"
+    "X5usVGNTmVYsOdRVJo44blSaMoNNbYoJ+gzZTapTpr9O9SkPDHmuGTLcJOhyJkuFXbIp3y"
+    "zquv3+AmEntObGnRqb5WgxCJpkvUx/XQPPsqnnwdjbRZnlTNYVmx9aGAXjwGxUYwtW6wSv"
+    "dBgvsyyDPKAMIpccwUWPzWfxo1YTY82JmYG77PxWjJLKQ2z0Cr1M/mT+tG5GX+P8P/2M9q"
+    "nY0egecLafmWlaih1Nrtl5Yj+jGNY3NOk2qehpcjtoflvj55Q2nc2KZdr25s7txfoa6AHU"
+    "6JCeGawzwQYXcY/epA0Ss4Ojc5l2pXdzy86yl2hvdxSInli8a7O+AUWXXZn0k5HanA+0zi"
+    "blv6OU/xeyINkliyatnMn7TFsvcrUgt0YDiIn6+wS40+ksAFBozQWoxmYBihl55U3Dj4vT"
+    "k2qIOZMCyF9EOHjlIJu3t8RZlN+sJtYaitJruWgvCG5xHt72sfGnyHX483SgKNCAu0w9RT"
+    "1g8Kr/56ooL9E/QZ4swQ=="
+)

+ 23 - 0
models.py

@@ -0,0 +1,23 @@
+from tortoise.models import Model
+from tortoise import fields
+
+
+class Publish(Model):
+    name = fields.CharField(max_length=32, verbose_name="出版社名称")
+    email = fields.CharField(max_length=32, verbose_name="出版社邮箱")
+
+
+class Author(Model):
+    name = fields.CharField(max_length=32, verbose_name="作者")
+    age = fields.IntField(verbose_name="年龄")
+
+
+class Book(Model):
+    title = fields.CharField(max_length=32, verbose_name="书籍名称")
+    price = fields.IntField(verbose_name="价格")
+    # pub_date = models.DateField(verbose_name="出版日期")
+    img_url = fields.CharField(max_length=255, null=True, blank=True, verbose_name="")
+    bread = fields.IntField(verbose_name="阅读量")
+    bcomment = fields.IntField(verbose_name="评论量")
+    publishs = fields.ForeignKeyField('models.Publish', related_name='books')
+    authors = fields.ManyToManyField('models.Author', related_name='books', description="作者")

+ 4 - 0
pyproject.toml

@@ -0,0 +1,4 @@
+[tool.aerich]
+tortoise_orm = "settings.TORTOISE_ORM"
+location = "./migrations"
+src_folder = "./."

+ 27 - 0
settings.py

@@ -0,0 +1,27 @@
+# settings.py
+TORTOISE_ORM = {
+    "connections": {
+        "default": {
+            "engine": "tortoise.backends.mysql",
+            "credentials": {
+                "host": "127.0.0.1",
+                "port": 3306,
+                "user": "root",
+                "password": "123456789",
+                "database": "fastapi_db",
+            },
+            "minsize": 1,
+            "maxsize": 5,
+            "echo": True,  # 打印执行的SQL语句,开发调试用
+        }
+    },
+    # 注册所有存放模型的文件/模块
+    "apps": {
+        "models": {
+            "models": ['models',"aerich.models"],
+            "default_connection": "default",
+        }
+    },
+    'use_tz':False,
+    'timezone':'Asia/Shanghai'
+}