This fork is an attempt to translate all of the comments and documentation into English. Everything else stays the same. I'm open to PRs if anyone wants to help correct some of the translations. All of the translations came from gathering all of the Chinese throughout all of the files and then running it through the OpenAI API to translate. Then another script went through and did a find and replace. I'm sure there sentences that need a bit of correction.
Caution
For 2023-12-21 (announcement)
The master branch has been fully migrated to pydantic-v2, please pay extra attention to sync fork operations to avoid irreparable damage! We have kept and locked the original branch (pydantic-v1), which you can get in the branch selector
Pydantic-V2 Completed 🎉
English | Simplified Chinese
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
username / password: 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: system user role management, permission assignment
- Department Management: Configure the system organization (company, department, group...)
- Menu Management: Configuration of system menus, user menus, button privilege identification
- Role Management: Assign role menu privileges, assign role routing privileges
- Dictionary Management: Maintain common fixed data or parameters within the system.
- Operation Logs: logging and querying of normal and abnormal system operations.
- Login Authentication: graphical authentication code background authentication login
- Login Logs: Logging and querying of normal and abnormal user logins
- Service Monitoring: server hardware device information and status
- Scheduled tasks: automated tasks, asynchronous tasks, and function invocation are supported
- Interface Documentation: Automatically generate online interactive API interface documentation.
- Python: 3.10+
- Mysql: 8.0+
- Redis: The latest stable version is recommended
- Nodejs: 14.0+
-
Install dependencies
pip install -r requirements.txt
-
Create a database
fba
, choose utf8mb4 encoding -
Install and start Redis
-
Create a
.env
file in thebackend/app/
directorycd backend/app/ touch .env
-
Copy
.env.example
to.env
cp .env.example .env
-
Database migration alembic
cd backend/app/ # Generate migration file alembic revision --autogenerate # Execute the migration alembic upgrade head
-
Start celery worker and beat
celery -A tasks worker --loglevel=INFO # Optional, if you don't need to use the scheduled task celery -A tasks beat --loglevel=INFO
-
Modify the configuration file as needed
-
Execute the
backend/app/main.py
file to start the service -
Browser access: https://127.0.0.1:8000/api/v1/docs
Go to fastapi_best_architecture_ui for details
Warning
Default port conflict: 8000,3306,6379,5672
As a best practice, shut down on-premises services before deployment: mysql,redis,rabbitmq...
-
Go to the directory where the
docker-compose.yml
file is located and create the environment variable file.env
cd deploy/docker-compose/ cp .env.server ../../backend/app/.env # This command is optional cp .env.docker .env
-
Modify the configuration file as needed
-
Execute the one-click boot command
docker-compose up -d --build
-
Wait for the command to complete automatically
-
Visit the browser: https://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) and remember to perform database migration for each change
- Define the data validation model (schema)
- Define routes (router) and views (api)
- Define the business logic (service)
- Write database operations (crud)
Go to fastapi_best_architecture_ui for details
Execute unittests via pytest
-
Create the test database
fba_test
, select utf8mb4 encoding -
Using
backend/sql/create_tables.sql
file to create database tables -
Initialize the test data using the
backend/sql/init_pytest_data.sql
file -
Enter the app directory
cd backend/app/
-
Execute the test command
pytest -vs --disable-warnings
If this program has helped you, you can sponsor us with some coffee beans: ☕ Sponsor ☕
This project is licensed under the terms of the MIT license