/fastapi_best_architecture

基于 FastAPI 构建的前后端分离 RBAC 权限控制系统,采用独特的伪三层架构模型设计,内置 fastapi-admin 基本实现,并作为模板库免费开源

Primary LanguagePythonMIT LicenseMIT

FastAPI Best Architecture

GitHub Static Badge Ruff Pydantic v2

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🔥

Pseudo three-tier architecture

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

Online Demo

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

Features

  • 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

Built-in features

  1. User management: system user role management, permission assignment
  2. Department Management: Configure the system organization (company, department, group...)
  3. Menu Management: Configuration of system menus, user menus, button privilege identification
  4. Role Management: Assign role menu privileges, assign role routing privileges
  5. Dictionary Management: Maintain common fixed data or parameters within the system.
  6. Operation Logs: logging and querying of normal and abnormal system operations.
  7. Login Authentication: graphical authentication code background authentication login
  8. Login Logs: Logging and querying of normal and abnormal user logins
  9. Service Monitoring: server hardware device information and status
  10. Scheduled tasks: automated tasks, asynchronous tasks, and function invocation are supported
  11. Interface Documentation: Automatically generate online interactive API interface documentation.

Local development

  • Python: 3.10+
  • Mysql: 8.0+
  • Redis: The latest stable version is recommended
  • Nodejs: 14.0+

Backend

  1. Enter the backend directory

    cd backend
  2. Install the dependencies

    pip install -r requirements.txt
  3. Create a database fba with utf8mb4 encoding.

  4. Install and start Redis

  5. Create a .env file in the backend directory.

    touch .env
    
    cp .env.example .env
  6. Modify the configuration files core/conf.py and .env as needed.

  7. database migration alembic

    # Generate the migration file
    alembic revision --autogenerate
    
    # Execute the migration
    alembic upgrade head
  8. 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
  9. Initialize test data (Optional)

  10. Execute the main.py file to start the service

  11. Open a browser and visit: http://127.0.0.1:8000/api/v1/docs

Front end

Jump to fastapi_best_architecture_ui View details


Docker Deployment

Warning

Default port conflicts: 8000, 3306, 6379, 5672.

It is recommended to shut down local services: mysql, redis, rabbitmq... before deployment.

  1. 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
  2. Modify the configuration files backend/core/conf.py and .env as needed.

  3. Execute the one-click startup command

    docker-compose up -d --build
  4. Wait for the command to complete.

  5. Open a browser and visit: http://127.0.0.1:8000/api/v1/docs

Test data

Initialize the test data using the backend/sql/init_test_data.sql file.

Development Process

(For reference only)

  1. define the database model (model)
  2. define the data validation model (schema)
  3. define the view (api) and routing (router)
  4. write business (service)
  5. write database operations (crud)

Testing

Execute unit tests through pytest.

  1. create a test database fba_test with utf8mb4 encoding

  2. create database tables using the backend/sql/create_tables.sql file

  3. initialize the test data using the backend/sql/init_pytest_data.sql file

  4. Go to the backend directory and execute the test commands.

    cd backend/
    
    pytest -vs --disable-warnings

Status

Alt

Contributors

Special thanks

Interactivity

WeChat / QQ

Sponsor us

If this program has helped you, you can sponsor us with some coffee beans: ☕ Sponsor ☕

License

This project is licensed by the terms of the MIT license

Stargazers over time