Pokaż stronęPoprzednie wersjeOdnośnikiDo góry Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić. ====== Django REST Framework ====== * Instalacja <code> pip install django djangorestframework drf-spectacular </code> \\ * Utworzenie projektu i aplikacji <code> django-admin startproject api cd api python manage.py startapp blinds </code> \\ * Utworzenie modelu danych \\ ''blinds/models.py'' <code python> 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) </code> \\ * Dodanie aplikacji ''api/settings.py'' <code python> INSTALLED_APPS = [ ... 'rest_framework', 'blinds', ] </code> \\ * Dodanie ustawień drf-spectacular ''api/settings.py'' <code python> 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', } </code> \\ * Inne ustawienia ''api/settings.py'' <code python> ALLOWED_HOSTS = ['192.168.1.248', '192.168.4.1', 'localhost', '127.0.0.1'] LANGUAGE_CODE = 'pl' TIME_ZONE = 'Europe/Warsaw' </code> \\ * Migracje: <code> python manage.py makemigrations python manage.py migrate </code> \\ * Stworzenie serializera ''blinds/serializers.py'' <code python> 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'] </code> \\ * Stworzenie widoku ''views.py'' <code python> 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 </code> \\ * Dodanie opisu do dokumentacji ''views.py'' <code python> 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): ... </code> \\ * Utworzenie URL dla API ''api/urls.py'' <code python> from blinds import views urlpatterns = [ ... path('api/blinds', views.BlindsList.as_view()), ] </code> \\ * Dodanie URLi dla ''drf-spectacular'' ''api/urls.py'' <code python> 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'), ] </code> \\ * Dodanie modelu danych do panelu administracyjnego ''blinds/admin.py'' <code python> from .models import Blind admin.site.register(Blind) </code> \\ * Utworzenie konta administratora <code> python manage.py createsuperuser </code> \\ * Uruchomienie serwera <code> python manage.py runserver </code> \\ \\ ===== Dodanie autoryzacji ===== * Instalacja <code> pip install djangorestframework-simplejwt </code> \\ * Dodanie konfiguracji \\ ''settings.py'' <code python> 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', } </code> \\ * Dodanie URLi urls.py <code python> 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'), ... ] </code> \\ * Zabezpieczenie widoków views.py <code python> from rest_framework.permissions import IsAuthenticated, DjangoModelPermissions class BlindViewSet(viewsets.ModelViewSet): ... permission_classes = [IsAuthenticated, DjangoModelPermissions] </code> \\ * Stworzyć użytkownika, który będzie miał dostęp tylko do API: * W ''Panelu administracyjnym'' stworzyć grupę użytkowników ''API Users'' i 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 <code python> DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'twoja_baza_danych', 'USER': 'twoj_uzytkownik', 'PASSWORD': 'twoje_haslo', 'HOST': 'localhost', 'PORT': '3306', } } </code> \\ * Dodać IP/adres serwera do ''ALLOWED_HOSTS'' ''settings.py'' <code python> ALLOWED_HOSTS = ['192.168.1.123', 'sases.pl', 'localhost', '127.0.0.1'] </code> \\ * Zainstalować biblioteki <code> sudo apt install libmariadb-dev-compat libmariadb-dev pip install django djangorestframework drf-spectacular djangorestframework-simplejwt mysqlclient </code> \\ * Przeprowadzić migracje bazy danych <code> python manage.py migrate </code> \\ * Utworzyć konto administratora oraz użytkownika API * Uruchomić serwer <code> python manage.py runserver 0.0.0.0:8000 </code> \\ * Sprawdzić działanie Django przez wpisanie w przeglądarce [[http://192.168.1.248:8000/]] * Dodać do [[linux:start#cron|crontab]] uruchamianie Django po uruchomieniu serwera <code> @reboot python /var/www/django/manage.py runserver 0.0.0.0:8000 </code> \\ * Utworzyć grupę użytkowników ''API Users'', przypisać jej dostęp oraz utworzyć użytkownika dla API programowanie/python/django.txt ostatnio zmienione: 2025/07/05 22:56przez sases