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.
Key | Value |
---|---|
Authorization | {Token provided by JWT} |
Accept | application/json |
Content-Type | application/json |
Accept-Language | application/json |
$ 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
Password: Pass-1234
OpenAPI documentation: http://localhost:8000/docs
Method | Path | Description | Auth | Is Admin |
---|---|---|---|---|
POST | /auth/login | Login a user | No | No |
GET | /auth/me | Check if user authenticated | Yes | No |
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 |
Method | Path | Description | Auth | Is Admin |
---|---|---|---|---|
GET | /roles | Get all the roles | Yes | Yes |
GET | /roles/{id} | Get a role | Yes | Yes |
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=""
Docker repository: https://hub.docker.com/r/javi98/python-api-crud-template
- 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
├── python-api-crud-template-app ├── python-api-crud-template-db ├── python-api-crud-template-smtp └── python-api-crud-template-phpmyadmin
$ 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