To jest stara wersja strony!
Django REST Framework
- Instalacja
pip install django djangorestframework drf-spectacular
- Utworzenie projektu i aplikacji
django-admin startproject api cd api python manage.py startapp blinds
- Utworzenie modelu danych
blinds/models.py
from django.db import models class Blind(models.Model): position = models.IntegerField(blank=False, default=0) runtime_up = models.IntegerField(blank=False) runtime_down = models.IntegerField(blank=False) pass_up = models.IntegerField(default=0) pass_down = models.IntegerField(default=0) calibrated = models.DateTimeField(blank=True, null=True)
- Dodanie aplikacji
api/settings.py
INSTALLED_APPS = [ ... 'rest_framework', 'blinds', ]
- Dodanie ustawień drf-spectacular
api/settings.py
INSTALLED_APPS = [ ... 'drf_spectacular', ] REST_FRAMEWORK = { 'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema', } SPECTACULAR_SETTINGS = { 'TITLE': 'Sases Smart Home API', 'DESCRIPTION': 'Dokumentacja API dla Sases Smart Home', 'VERSION': '1.0.0', }
- Migracje:
python manage.py makemigrations python manage.py migrate
- Stworzenie serializera
blinds/serializers.py
from rest_framework import serializers from .models import Blind class BlindSerializer(serializers.ModelSerializer): class Meta: model = Blind fields = ['id', 'position', 'runtime_up', 'runtime_down', 'pass_up', 'pass_down', 'calibrated']
- Stworzenie widoku
views.py
from django.shortcuts import render from rest_framework import generics from .models import Blind from .serializers import BlindSerializer class BlindsList(generics.ListAPIView): queryset = Blind.objects.all() serializer_class = BlindSerializer
- Dodanie opisu do dokumentacji
views.py
from drf_spectacular.utils import extend_schema @extend_schema( summary="Lista rolet wraz z ich parametrami", description="Zwraca listę wszystkich rolet z ich szczegółowymi informacjami.", responses={200: BlindSerializer(many=True)} ) class BlindsList(generics.ListAPIView): ...
- Utworzenie URL dla API
api/urls.py
from blinds import views urlpatterns = [ ... path('api/blinds', views.BlindsList.as_view()), ]
- Dodanie URLi dla
drf-spectacular
api/urls.py
from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView urlpatterns = [ ... path('api/schema/', SpectacularAPIView.as_view(), name='schema'), path('api/docs/', SpectacularSwaggerView.as_view(url_name='schema'), name='swagger-ui'), ]
- Dodanie modelu danych do panelu administracyjnego
blinds/admin.py
from .models import Blind admin.site.register(Blind)
- Utworzenie konta administratora
python manage.py createsuperuser
- Uruchomienie serwera
python manage.py runserver
Dodanie autoryzacji
- Instalacja
pip install djangorestframework-simplejwt
- Dodanie konfiguracji
settings.py
from datetime import timedelta INSTALLED_APPS = [ ... 'rest_framework_simplejwt', ... ] REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_simplejwt.authentication.JWTAuthentication', ), } SIMPLE_JWT = { 'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5), 'REFRESH_TOKEN_LIFETIME': timedelta(days=1), 'ROTATE_REFRESH_TOKENS': False, 'BLACKLIST_AFTER_ROTATION': True, 'ALGORITHM': 'HS256', 'SIGNING_KEY': SECRET_KEY, 'VERIFYING_KEY': None, 'AUTH_HEADER_TYPES': ('Bearer',), 'USER_ID_FIELD': 'id', 'USER_ID_CLAIM': 'user_id', 'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',), 'TOKEN_TYPE_CLAIM': 'token_type', 'JTI_CLAIM': 'jti', }
- Dodanie URLi
urls.py
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView urlpatterns = [ path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'), path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'), ... ]
- Zabezpieczenie widoków
views.py
from rest_framework.permissions import IsAuthenticated, DjangoModelPermissions class BlindViewSet(viewsets.ModelViewSet): ... permission_classes = [IsAuthenticated, DjangoModelPermissions]
- Stworzyć użytkownika, który będzie miał dostęp tylko do API:
- W
Panelu administracyjnymstworzyć grupę użytkownikówAPI Usersi przypisać jej dostęp do modelu API. - Stworzyć użytkownika i przypisać go do grupy
API Users.
Przeniesienie na serwer linux
- Stworzyć bazę danych MariaDB wraz z użytkownikiem
- Skopiować pliki
- Dodać konfigurację bazy danych do Django
settings.py
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'twoja_baza_danych', 'USER': 'twoj_uzytkownik', 'PASSWORD': 'twoje_haslo', 'HOST': 'localhost', 'PORT': '3306', } }
- Dodać IP serwera do
ALLOWED_HOSTS
settings.py
ALLOWED_HOSTS = ['192.168.1.248', 'localhost', '127.0.0.1']
- Zainstalować biblioteki
sudo apt install libmariadb-dev-compat libmariadb-dev pip install django djangorestframework drf-spectacular djangorestframework-simplejwt mysqlclient
- Przeprowadzić migracje bazy danych
python manage.py migrate
- Utworzyć konto administratora oraz użytkownika API
- Uruchomić serwer
python manage.py runserver 0.0.0.0:8000
- Sprawdzić działanie Django przez wpisanie w przeglądarce http://192.168.1.248:8000/
- Dodać do crontab uruchamianie Django po uruchomieniu serwera
@reboot python /var/www/django/manage.py runserver 0.0.0.0:8000