Caution
For 2024-3-22 (announcement)
The master branch has completed the app architecture refactoring, please pay extra attention to sync fork operations to avoid irreparable damage!
We have kept and locked the original branch (legacy-single-app-pydantic-v2), which you can get in the branch selector
English | 简体中文
FastAPI framework based on the front-end and back-end separation of the middle and back-end solutions, follow the pseudo three-tier architecture design, support for python3.10 and above versions
Its purpose is to allow you to use it directly as the infrastructure of your new project, this repository as a template library open to any person or enterprise can be used for free!
🔥Continuously updated and maintained🔥
The mvc architecture is a common design pattern in python web, but the three-tier architecture is even more fascinating
In python web development, there is no common standard for the concept of three-tier architecture, so we'll call it a pseudo three-tier architecture here
But please note that we don't have a traditional multi-app structure (django, springBoot...) If you don't like this pattern, use templates to transform it to your heart's content!
workflow | java | fastapi_best_architecture |
---|---|---|
view | controller | api |
data transmit | dto | schema |
business logic | service + impl | service |
data access | dao / mapper | crud |
model | model / entity | model |
You can view some of the preview screenshots in fastapi_best_architecture_ui
Luckily, we now have a demo site: FBA UI
tester: test / 123456
super: admin / 123456
- Design with FastAPI PEP 593 Annotated Parameters
- Global asynchronous design with async/await + asgiref
- Follows Restful API specification
- Global SQLAlchemy 2.0 syntax
- Pydantic v1 and v2 (different branches)
- Casbin RBAC access control model
- Role menu RBAC access control model
- Celery asynchronous tasks
- JWT middleware whitelist authentication
- Global customizable time zone time
- Docker / Docker-compose deployment
- Pytest Unit Testing
- User management: management of system user roles, assignment of permissions
- Departmental management: Configuration of the system organization (company, department, group, ...)
- Menu management: Configuration of system menus, user menus, button permission labels
- Role management: assignment of role menu privileges, assignment of role routing privileges
- Dictionary management: maintenance of commonly used fixed data or parameters within the system
- Code generation: back-end code is automatically generated, supporting preview, write and download.
- Operation log: logging and querying of normal and abnormal system operations.
- Login authentication: graphical captcha backend authentication login
- Logging: logging and querying of normal and abnormal user logins
- Service monitoring: server hardware device information and status
- Timed tasks: automated tasks, asynchronous tasks, support for function calls
- Interface Documentation: Automatically generate online interactive API interface documentation.
├─📁 backend--------------- # Backend
│ ├─📁 alembic------------- # Database Migrations
│ ├─📁 app----------------- # Application
│ │ ├─📁 admin------------- # Admin Panel
│ │ │ ├─📁 api------------- # API
│ │ │ │ └─📁 v1------------ # API Version
│ │ │ ├─📁 crud------------ # CRUD Operations
│ │ │ ├─📁 model----------- # Models
│ │ │ ├─📁 schema---------- # Data Transfers
│ │ │ ├─📁 service--------- # Services
│ │ │ └─📁 tests----------- # Tests
│ │ ├─📁 generator--------- # Code Generator
│ │ └─📁 task-------------- # Task Application
│ │ └─📁 celery_task----- # Task Layers
│ ├─📁 common-------------- # Common Resources
│ │ ├─📁 exception--------- # Exceptions
│ │ ├─📁 response---------- # Responses
│ │ └─📁 security---------- # Security
│ ├─📁 core---------------- # Core Configuration
│ ├─📁 database------------ # Database Connection
│ ├─📁 log----------------- # Log Storage
│ ├─📁 middleware---------- # Middleware
│ ├─📁 scripts------------- # Scripts
│ ├─📁 sql----------------- # SQL Files
│ ├─📁 static-------------- # Static Files
│ ├─📁 templates----------- # Templates
│ │ └─📁 py---------------- # Python Code Generation
│ └─📁 utils--------------- # Utilities
└─📁 deploy---------------- # Deployment
└─📁 backend------------- # Backend Deployment
└─📁 docker-compose---- # Docker Deployment
- Python: 3.10+
- Mysql: 8.0+
- Redis: The latest stable version is recommended
- Nodejs: 14.0+
-
Enter the
backend
directorycd backend
-
Install the dependencies
pip install -r requirements.txt
-
Create a database
fba
with utf8mb4 encoding. -
Install and start Redis
-
Create a
.env
file in thebackend
directory.touch .env cp .env.example .env
-
Modify the configuration files
core/conf.py
and.env
as needed. -
database migration alembic
# Generate the migration file alembic revision --autogenerate # Execute the migration alembic upgrade head
-
Start celery worker, beat and flower
celery -A app.task.celery worker -l info # Scheduled tasks (optional) celery -A app.task.celery beat -l info # Web monitor (optional) celery -A app.task.celery flower --port=8555 --basic-auth=admin:123456
-
Initialize test data (Optional)
-
Start fastapi service
# Help
fastapi --help
# Dev mode
fastapi dev main.py
- Open a browser and visit: http://127.0.0.1:8000/api/v1/docs
Jump to fastapi_best_architecture_ui View details
Warning
Default port conflicts: 8000, 3306, 6379, 5672.
It is recommended to shut down local services: mysql, redis, rabbitmq... before deployment.
-
Go to the
deploy/backend/docker-compose
directory, and create the environment variable file.env
.cd deploy/backend/docker-compose touch .env.server ../../../backend/.env cp .env.server ../../../backend/.env
-
Modify the configuration files
backend/core/conf.py
and.env
as needed. -
Execute the one-click startup command
docker-compose up -d --build
-
Wait for the command to complete.
-
Open a browser and visit: http://127.0.0.1:8000/api/v1/docs
Initialize the test data using the backend/sql/init_test_data.sql
file.
(For reference only)
- define the database model (model)
- define the data validation model (schema)
- define the view (api) and routing (router)
- write business (service)
- write database operations (crud)
Execute unit tests through pytest
.
-
create a test database
fba_test
with utf8mb4 encoding -
create database tables using the
backend/sql/create_tables.sql
file -
initialize the test data using the
backend/sql/init_pytest_data.sql
file -
Go to the
backend
directory and execute the test commands.cd backend/ pytest -vs --disable-warnings
If this program has helped you, you can sponsor us with some coffee beans: ☕ Sponsor ☕
This project is licensed by the terms of the MIT license