W poszukiwaniu idealnego frameworka webowego.
Najpopularniejsze frameworki webowe dla Python to Django i Flask. PIerwszy zalecany jest dla dużych serwisów i jak mówią w internecie posiada wszystko co trzeba żeby postawić dużą aplikację. Flask z kolei jest bardzo skromny na dzień dobry, ale poprzez doinstalowanie dodatkowych modułów pozwala na równie wiele.
Django nie testowałem, miałem krótką przygodę z Flask, ale po poznaniu Laravel (PHP) uznałem że potrzebuje czegoś więcej. I wtedy pojawił się FastAPI. Wydaje się on być kompromisem pomiędzy Django a Flask. Ma już sporo rzeczy w sobie, ale jednocześnie pozwala stworzyć serwis w 5 linijkach kodu.
Lokalna instalacja
apt-get install python3-venv
sudo su root
python3 -m venv --copies ve
source ve/bin/activate
pip install -U pip setuptools
pip install wheel
pip list
pip install fastapi[all]
Plik main.py
:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
Uruchomienie:
uvicorn main:app --port 5000 --reload
W przypadku struktury:
└── project
└── app
├── __init__.py
└── main.py
uruchomienie odbędzie się komendą:
uvicorn app.main:app --port 5000 --reload
Połączenie z MySQL
pip install sqlalchemy
pip install mysql-connector-python
pip instal sqlacodegen
Do nauki korzystam z MySQL (docker). Uruchomienie:
sudo docker-compose up -d
Na potrzeby wygenerowania modeli dla SQLAlchemy skorzystałem z sqlacodegen:
sqlacodegen --outfile models.py \
mysql+mysqlconnector://{user_name}:{password}@{host}:{port}/{database_name}?charset=utf8
Struktura dla większego projektu
.
├── app/
│ ├── __init__.py
│ ├── main.py
│ ├── config/
│ │ ├── __init__.py
│ │ ├── db.py
│ │ └── settings.py
│ ├── models/
│ │ ├── __init__.py
│ │ ├── clients.py
│ │ └── user.py
│ ├── routers/
│ │ ├── __init__.py
│ │ ├── auth.py
│ │ ├── basic_db_req.py
│ │ ├── registrations.py
│ │ └── www.py
│ ├── schemas/
│ │ ├── __init__.py
│ │ ├── auth.py
│ │ ├── clients.py
│ │ └── users.py
│ ├── services/
│ │ ├── __init__.py
│ │ ├── auth.py
│ │ ├── clients.py
│ │ ├── crud.py
│ │ └── notification.py
│ ├── static/
│ └── templates/
│ ├── 404.html
│ ├── 500.html
│ ├── form.html
│ ├── index.html
│ ├── navbar.html
│ ├── onboarding.html
│ ├── plt/
│ │ ├── plt_mileage.html
│ │ ├── plt_price.html
│ │ └── plt_sca_year.html
│ ├── price.html
│ └── sudoku.html
└── docker-compose.yml