新建小程序后端,新建数据库
This commit is contained in:
1
mini-program/app/__init__.py
Normal file
1
mini-program/app/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
35
mini-program/app/main.py
Normal file
35
mini-program/app/main.py
Normal 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))),
|
||||
)
|
||||
1
mini-program/app/routers/__init__.py
Normal file
1
mini-program/app/routers/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
8
mini-program/app/routers/health.py
Normal file
8
mini-program/app/routers/health.py
Normal 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"}
|
||||
46
mini-program/app/settings.py
Normal file
46
mini-program/app/settings.py
Normal 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()
|
||||
Reference in New Issue
Block a user