Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/javi-cc/python-api-crud-template

PYTHON 3.12 FASTAPI API CRUD USERS TEMPLATE
https://github.com/javi-cc/python-api-crud-template

api docker email-sender excel-export fastapi middleware migrations multi-language pdf-export pydantic python seeders sqlalchemy uuid

Last synced: about 2 months ago
JSON representation

PYTHON 3.12 FASTAPI API CRUD USERS TEMPLATE

Awesome Lists containing this project

README

        


FastAPI



FastAPI framework, high performance, easy to learn, fast to code, ready for production




Test


Coverage


Package version


Supported Python versions

---

Application made with FastAPI that consists of the creation of a CRUD of a user and system authentication api that contains the following functionalities:


  • Relationships between different models.

  • Primary key format UUID.

  • Contains endpoints of type GET, POST, PATCH, PUT and DELETE

  • Generate token by JWT (Json web tokens)

  • SQLAlchemy.

  • Pydantic.

  • Postman collection.json file to import and create use endpoints.

  • Requests validations.

  • Exception handling.

  • Email sending notification to verify the user.

  • Enums.

  • Middleware.

  • Dependencies validations.

  • File Storage.

  • Exports in Excel and PDF format.

  • Jinja2 Email Templates.

  • Multi language support.

  • Migration file to create all the tables in the database.

  • Seeders are in JSON format.

  • Python 3.12

  • Users contain different roles and permissions.

  • The project contains the files to deploy it in Docker.

Headers

Key
Value

Authorization
{Token provided by JWT}

Accept
application/json

Content-Type
application/json

Accept-Language
application/json

Setup



$ apt-get install wkhtmltopdf


$ cp .env.example .env.dev


$ pip install --no-cache-dir --upgrade -r requirements.txt


$ sed -i '/JWT_SECRET_KEY=""/d' .env.dev && jwt_secret_key="JWT_SECRET_KEY=$(openssl rand -hex 32)" && sed -i -e "22i$jwt_secret_key" .env.dev


$ fastapi run app/main.py --port 8000 --reload

User admin credentials


User: [email protected]

Password: Pass-1234


OpenAPI documentation: http://localhost:8000/docs


FastAPI

Endpoints Auth:

Method
Path
Description
Auth
Is Admin

POST
/auth/login
Login a user
No
No

GET
/auth/me
Check if user authenticated
Yes
No

Endpoints Users:

Method
Path
Description
Auth
Is Admin

GET
/users
Get all the users
Yes
No

GET
/users/{id}
Get a user
Yes
No

POST
/users
Add new user
Yes
Yes

PUT
/users/{id}
Update a user
Yes
Yes

PATCH
/users/update_password
Update password current user
Yes
No

DELETE
/users/{id}
Delete a user
Yes
Yes

GET
/users/export/excel
Export all users in Excel format
Yes
Yes

GET
/users/export/pdf
Export all users in Pdf format
Yes
Yes

GET
/users/confirm_email/{hash}
Confirm verification user
No
No

GET
/users/resend/confirm_email
Resend email verification user
Yes
No

Endpoints Roles:

Method
Path
Description
Auth
Is Admin

GET
/roles
Get all the roles
Yes
Yes

GET
/roles/{id}
Get a role
Yes
Yes



Configure values in the .env.dev file



APP_URL="http://localhost:8000"



DB_DRIVER=""
DB_HOST=""
DB_PORT=""
DB_DATABASE=""
DB_USERNAME=""
DB_PASSWORD=""



MAIL_SERVER=""
MAIL_PORT=""
MAIL_USERNAME=""
MAIL_PASSWORD=""
MAIL_FROM_ADDRESS=""
MAIL_FROM_NAME=""
MAIL_STARTTLS=""
MAIL_SSL_TLS=""
MAIL_USE_CREEDENTIALS=""



# command generate JWT_SECRET_KEY: openssl rand -hex 32
JWT_SECRET_KEY=""
JWT_ALGORITHM=""


Deploy to Docker 🐳

Docker repository: https://hub.docker.com/r/javi98/python-api-crud-template

Containers:




  • python:3.12 - :8000


  • mariadb:11.2.2 - :3306


  • phpmyadmin:5.2.1 - :8085->80/tcp


  • mailhog:v1.0.1 - :1025 # smtp server :8025 # web ui

Containers structure:


├── python-api-crud-template-app

├── python-api-crud-template-db
├── python-api-crud-template-smtp
└── python-api-crud-template-phpmyadmin

Setup:



$ git clone https://github.com/JAVI-CC/python-api-crud-template.git
$ cd python-api-crud-template
$ cp .env.example .env.dev
$ docker compose up -d
$ docker compose exec app chmod +x ./docker-config/run.sh
$ docker compose exec app ./docker-config/run.sh


Once you have the containers deployed, you can access the API at http://localhost:8000