新建小程序后端,新建数据库

This commit is contained in:
ChengCan
2026-03-25 15:58:48 +08:00
parent 7510ca6df1
commit 5a45ee1106
8 changed files with 401 additions and 0 deletions

View File

@@ -0,0 +1 @@

35
mini-program/app/main.py Normal file
View File

@@ -0,0 +1,35 @@
import os
from fastapi import FastAPI
try:
# For module mode: `uvicorn app.main:app`
from app.routers.health import router as health_router
from app.settings import settings
except ModuleNotFoundError:
# For script mode: `python app/main.py` or VS Code "Run Python File"
from routers.health import router as health_router
from settings import settings
def create_app() -> FastAPI:
app = FastAPI(
title=settings.app_name,
version=settings.app_version,
description=settings.app_description,
)
app.include_router(health_router)
return app
app = create_app()
if __name__ == "__main__":
import uvicorn
uvicorn.run(
app,
host=os.getenv("HOST", settings.host),
port=int(os.getenv("PORT", str(settings.port))),
)

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1,8 @@
from fastapi import APIRouter
router = APIRouter(tags=["health"])
@router.get("/health")
async def health() -> dict[str, str]:
return {"status": "ok"}

View File

@@ -0,0 +1,46 @@
from functools import lru_cache
from urllib.parse import quote_plus
from pydantic import Field
from pydantic_settings import BaseSettings, SettingsConfigDict
class Settings(BaseSettings):
model_config = SettingsConfigDict(
env_file=".env",
env_file_encoding="utf-8",
extra="ignore",
)
app_name: str = Field(default="mini-program-api", validation_alias="APP_NAME")
app_version: str = Field(default="0.1.0", validation_alias="APP_VERSION")
app_description: str = Field(
default="Backend service for mini program",
validation_alias="APP_DESCRIPTION",
)
host: str = Field(default="0.0.0.0", validation_alias="HOST")
port: int = Field(default=8001, validation_alias="PORT")
db_host: str = Field(default="127.0.0.1", validation_alias="DB_HOST")
db_port: int = Field(default=3306, validation_alias="DB_PORT")
db_user: str = Field(default="root", validation_alias="DB_USER")
db_password: str = Field(default="", validation_alias="DB_PASSWORD")
db_name: str = Field(default="mini_program", validation_alias="DB_NAME")
@property
def mysql_dsn(self) -> str:
user = quote_plus(self.db_user)
password = quote_plus(self.db_password)
auth = f"{user}:{password}" if password else user
return (
f"mysql+pymysql://{auth}@{self.db_host}:{self.db_port}/"
f"{self.db_name}?charset=utf8mb4"
)
@lru_cache(maxsize=1)
def get_settings() -> Settings:
return Settings()
settings = get_settings()