Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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
- Host: GitHub
- URL: https://github.com/javi-cc/python-api-crud-template
- Owner: JAVI-CC
- Created: 2024-07-16T07:21:29.000Z (6 months ago)
- Default Branch: master
- Last Pushed: 2024-07-28T14:06:43.000Z (5 months ago)
- Last Synced: 2024-07-28T20:59:01.685Z (5 months ago)
- Topics: api, docker, email-sender, excel-export, fastapi, middleware, migrations, multi-language, pdf-export, pydantic, python, seeders, sqlalchemy, uuid
- Language: Python
- Homepage:
- Size: 288 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
FastAPI framework, high performance, easy to learn, fast to code, ready for production
---
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
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