oktatas:web:back-end_framework:django:rest_api_kezdes
Különbségek
A kiválasztott változat és az aktuális verzió közötti különbségek a következők.
Előző változat mindkét oldalonElőző változatKövetkező változat | Előző változat | ||
oktatas:web:back-end_framework:django:rest_api_kezdes [2024/01/13 17:34] – [Read és Create] admin | oktatas:web:back-end_framework:django:rest_api_kezdes [2024/01/13 17:45] (aktuális) – eltávolítva admin | ||
---|---|---|---|
Sor 1: | Sor 1: | ||
- | [[oktatas: | ||
- | |||
- | ====== Django REST API kezdés ====== | ||
- | |||
- | * **Szerző: | ||
- | * Copyright (c) 2024, Sallai András | ||
- | * Licenc: [[https:// | ||
- | * Web: https:// | ||
- | |||
- | ====== Bevezetés ====== | ||
- | |||
- | |||
- | |||
- | * https:// | ||
- | ===== Projekt létrehozása ===== | ||
- | |||
- | Hozzuk létre a projekt könyvtárat és lépjünk be. | ||
- | |||
- | mkdir emp | ||
- | cd emp | ||
- | |||
- | |||
- | python3 -m venv .venv | ||
- | |||
- | |||
- | Aktiváljuk a környezetet: | ||
- | |||
- | MacOS és Linuxon: | ||
- | source .venv/ | ||
- | |||
- | Windowson: | ||
- | .\venv\Scripts\activate | ||
- | |||
- | Ellenőrizzük a jelenlegi függőségeket: | ||
- | pip freeze | ||
- | |||
- | Indítsunk VSCode-t: | ||
- | code . | ||
- | |||
- | Hozzuk létre a requirements.txt fájlt. Tartalma: | ||
- | |||
- | <code txt requirements.txt> | ||
- | django> | ||
- | djangorestframework | ||
- | pyyaml | ||
- | requests | ||
- | django-cors-headers | ||
- | </ | ||
- | |||
- | Telepítsük a függőségeket: | ||
- | pip install -r requirements.txt | ||
- | |||
- | Hozzuk létre két könyvtárat: | ||
- | |||
- | < | ||
- | emp/ | ||
- | |-backend/ | ||
- | |-py_client/ | ||
- | </ | ||
- | |||
- | ===== Főrész ===== | ||
- | |||
- | django-admin startproject emp . | ||
- | |||
- | ===== Indítás ===== | ||
- | |||
- | Lesz egy manage.py fájl, ami Python scripteket tartalmaz a projekt kezelésére. | ||
- | A szerver indítása: | ||
- | |||
- | python manage.py runserver | ||
- | |||
- | * http:// | ||
- | |||
- | Az alapvető adatbázis elkészítése: | ||
- | |||
- | python manage.py migrate | ||
- | |||
- | ===== Admin felület ===== | ||
- | |||
- | Nézzük meg az adminisztrációs felületet: | ||
- | |||
- | * http:// | ||
- | |||
- | Létre kell hoznunk egy felhasználót. Parancssorban: | ||
- | python manage.py createsuperuser | ||
- | |||
- | |||
- | A kimenet ehhez hasonló lehet: | ||
- | |||
- | < | ||
- | python manage.py createsuperuser | ||
- | Username (leave blank to use ' | ||
- | Email address: admin@zold.lan | ||
- | Password: | ||
- | Password (again): | ||
- | This password is too short. It must contain at least 8 characters. | ||
- | Bypass password validation and create user anyway? [y/N]: y | ||
- | Superuser created successfully. | ||
- | </ | ||
- | |||
- | Lépjünk be. | ||
- | |||
- | ===== Modell létrehozása ===== | ||
- | Hozza létre a models.py fájlt: | ||
- | |||
- | <code python emp/ | ||
- | from django.db import models | ||
- | |||
- | class Employee(models.Model): | ||
- | name = models.CharField(max_length=50) | ||
- | city = models.CharField(max_length=50) | ||
- | salary = models.FloatField() | ||
- | </ | ||
- | |||
- | |||
- | Regisztráljuk a settings.py fájlban a modellt: | ||
- | |||
- | |||
- | |||
- | Vegyük fel a tömb végére az employees mint alkalmazást: | ||
- | <code python settings.py> | ||
- | # ... | ||
- | # Application definition | ||
- | |||
- | INSTALLED_APPS = [ | ||
- | ' | ||
- | ' | ||
- | ' | ||
- | ' | ||
- | ' | ||
- | ' | ||
- | ' | ||
- | ] | ||
- | |||
- | # ... | ||
- | </ | ||
- | |||
- | Készítsünk migrációt: | ||
- | python3 manage.py makemigrations emp | ||
- | |||
- | Migráljunk: | ||
- | python3 manage.py migrate | ||
- | |||
- | ===== Modell az adminfelületre ===== | ||
- | |||
- | Kössük be a modellt az admin felületre: | ||
- | |||
- | <code python emp/ | ||
- | from django.contrib import admin | ||
- | from .models import Employee | ||
- | |||
- | admin.site.register(Employee) | ||
- | </ | ||
- | |||
- | Indítsuk újra a szervert, majd nézzük meg az admin felületet, a böngészőlap újratöltésével. | ||
- | |||
- | * http:// | ||
- | |||
- | Vegyünk fel két új dolgozót. | ||
- | ==== A __str__ felülírása ==== | ||
- | |||
- | <code python emp/ | ||
- | from django.db import models | ||
- | |||
- | class Employee(models.Model): | ||
- | name = models.CharField(max_length=50) | ||
- | city = models.CharField(max_length=50) | ||
- | salary = models.FloatField() | ||
- | |||
- | def __str__(self): | ||
- | return self.name | ||
- | </ | ||
- | |||
- | Nézzük meg újból az admin felületen a dolgozókat, | ||
- | * http:// | ||
- | |||
- | ===== REST framework használata ===== | ||
- | ==== Szeriálizálás ==== | ||
- | |||
- | Készítsünk egy az emp könyvtárban egy serializers.py fájlt, a következő tartalommal: | ||
- | |||
- | <code python emp/ | ||
- | from rest_framework import serializers | ||
- | from .models import Employee | ||
- | |||
- | class EmployeeSerializer(serializers.ModelSerializer): | ||
- | class Meta: | ||
- | model = Employee | ||
- | fields = [' | ||
- | |||
- | </ | ||
- | |||
- | ==== Nézet ==== | ||
- | |||
- | Készítsünk az emp könyvtárban egy views.py fájlt: | ||
- | |||
- | <code python emp/ | ||
- | from django.http import JsonResponse | ||
- | from .models import Employee | ||
- | from .serializers import EmployeeSerializer | ||
- | |||
- | def read_employees(request): | ||
- | employees = Employee.objects.all() | ||
- | serializer = EmployeeSerializer(employees, | ||
- | return JsonResponse(serializer.data, | ||
- | |||
- | </ | ||
- | |||
- | ==== Útvonal ==== | ||
- | |||
- | <code python emp/ | ||
- | from django.contrib import admin | ||
- | from django.urls import path | ||
- | from .views import read_employees | ||
- | |||
- | urlpatterns = [ | ||
- | path(' | ||
- | path(' | ||
- | ] | ||
- | |||
- | </ | ||
- | |||
- | ===== Read és Create ===== | ||
- | |||
- | <code python emp/ | ||
- | from django.http import JsonResponse | ||
- | from .models import Employee | ||
- | from .serializers import EmployeeSerializer | ||
- | from rest_framework.decorators import api_view | ||
- | from rest_framework.response import Response | ||
- | from rest_framework import status | ||
- | |||
- | @api_view([' | ||
- | def read_create_employees(request): | ||
- | if request.method == ' | ||
- | employees = Employee.objects.all() | ||
- | serializer = EmployeeSerializer(employees, | ||
- | return JsonResponse(serializer.data, | ||
- | |||
- | if request.method == ' | ||
- | serializer = EmployeeSerializer(data=request.data) | ||
- | if serializer.is_valid(): | ||
- | serializer.save() | ||
- | return Response(serializer.data, | ||
- | |||
- | </ | ||
- | |||
- | <code python emp/ | ||
- | from django.contrib import admin | ||
- | from django.urls import path | ||
- | from .views import read_create_employees | ||
- | |||
- | urlpatterns = [ | ||
- | path(' | ||
- | path(' | ||
- | ] | ||
- | |||
- | </ | ||
- | |||
- | ===== CRUD műveletek ===== | ||
- | |||
- | <code python emp/ | ||
- | from django.http import JsonResponse | ||
- | from .models import Employee | ||
- | from .serializers import EmployeeSerializer | ||
- | from rest_framework.decorators import api_view | ||
- | from rest_framework.response import Response | ||
- | from rest_framework import status | ||
- | |||
- | @api_view([' | ||
- | def read_create_employees(request): | ||
- | if request.method == ' | ||
- | employees = Employee.objects.all() | ||
- | serializer = EmployeeSerializer(employees, | ||
- | return JsonResponse(serializer.data, | ||
- | |||
- | if request.method == ' | ||
- | serializer = EmployeeSerializer(data=request.data) | ||
- | if serializer.is_valid(): | ||
- | serializer.save() | ||
- | return Response(serializer.data, | ||
- | |||
- | @api_view([' | ||
- | def detail_employee(request, | ||
- | try: | ||
- | employee = Employee.objects.get(pk=id) | ||
- | except Employee.DoesNotExist: | ||
- | return Response(status=status.HTTP_404_NOT_FOUND) | ||
- | | ||
- | if request.method == ' | ||
- | serializer = EmployeeSerializer(employee) | ||
- | return Response(serializer.data) | ||
- | | ||
- | elif request.method == ' | ||
- | serializer = EmployeeSerializer(employee, | ||
- | if serializer.is_valid(): | ||
- | serializer.save() | ||
- | return Response(serializer.data) | ||
- | return Response(serializer.errors, | ||
- | | ||
- | elif request.method == ' | ||
- | affected = employee.delete() | ||
- | return Response(affected, | ||
- | |||
- | </ | ||
- | |||
- | <code python emp/ | ||
- | from django.contrib import admin | ||
- | from django.urls import path | ||
- | from emp import views | ||
- | |||
- | urlpatterns = [ | ||
- | path(' | ||
- | path(' | ||
- | path(' | ||
- | ] | ||
- | |||
- | </ | ||
- | |||
oktatas/web/back-end_framework/django/rest_api_kezdes.1705163682.txt.gz · Utolsó módosítás: 2024/01/13 17:34 szerkesztette: admin