programowanie:python:django

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



  • 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 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.



  • 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


  • Uruchomić serwer
python manage.py runserver 0.0.0.0:8000


  • programowanie/python/django.1728143590.txt.gz
  • ostatnio zmienione: 2024/10/05 17:53
  • przez sases