{"id":120,"date":"2024-09-21T19:23:30","date_gmt":"2024-09-21T19:23:30","guid":{"rendered":"https:\/\/bina-meira.co.il\/?p=120"},"modified":"2024-09-21T19:23:30","modified_gmt":"2024-09-21T19:23:30","slug":"%d7%9e%d7%93%d7%a8%d7%99%d7%9a-%d7%a9%d7%a0%d7%95%d7%a6%d7%a8-%d7%9b%d7%95%d7%9c%d7%95-%d7%91%d7%91%d7%99%d7%a0%d7%94-%d7%9e%d7%9c%d7%90%d7%9b%d7%95%d7%aa%d7%99%d7%aa","status":"publish","type":"post","link":"https:\/\/bina-meira.co.il\/?p=120","title":{"rendered":"\u05de\u05d3\u05e8\u05d9\u05da \u05e9\u05e0\u05d5\u05e6\u05e8 \u05db\u05d5\u05dc\u05d5 \u05d1\u05d1\u05d9\u05e0\u05d4 \u05de\u05dc\u05d0\u05db\u05d5\u05ea\u05d9\u05ea."},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>\u05d4\u05e7\u05d3\u05de\u05d4<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u05d1\u05de\u05d3\u05e8\u05d9\u05da \u05d6\u05d4 \u05e0\u05d1\u05e0\u05d4 \u05d0\u05e4\u05dc\u05d9\u05e7\u05e6\u05d9\u05d4 \u05de\u05dc\u05d0\u05d4 \u05d4\u05de\u05e9\u05ea\u05de\u05e9\u05ea \u05d1-Django \u05dc\u05e9\u05e8\u05ea (Backend) \u05d5\u05d1-React \u05e2\u05dd TypeScript \u05dc\u05e6\u05d3 \u05d4\u05dc\u05e7\u05d5\u05d7 (Frontend). \u05d4\u05d0\u05e4\u05dc\u05d9\u05e7\u05e6\u05d9\u05d4 \u05ea\u05d3\u05de\u05d4 \u05de\u05e2\u05e8\u05db\u05ea \u05d4\u05e9\u05d0\u05dc\u05ea \u05e1\u05e4\u05e8\u05d9\u05dd \u05de\u05d4\u05e1\u05e4\u05e8\u05d9\u05d9\u05d4, \u05d5\u05ea\u05db\u05dc\u05d5\u05dc \u05e0\u05d9\u05d4\u05d5\u05dc \u05de\u05e0\u05d5\u05d9\u05d9\u05dd, \u05e1\u05e4\u05e8\u05d9\u05dd \u05d5\u05d4\u05e9\u05d0\u05dc\u05d5\u05ea. \u05e0\u05e9\u05ea\u05de\u05e9 \u05d1-Django Rest Framework (DRF) \u05db\u05d3\u05d9 \u05dc\u05d1\u05e0\u05d5\u05ea API \u05e9\u05d9\u05d0\u05e4\u05e9\u05e8 \u05ea\u05e7\u05e9\u05d5\u05e8\u05ea \u05d1\u05d9\u05df \u05d4-Backend \u05dc-Frontend.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u05e9\u05dc\u05d1 1: \u05d4\u05ea\u05e7\u05e0\u05ea \u05d4\u05db\u05dc\u05d9\u05dd \u05d4\u05e0\u05d3\u05e8\u05e9\u05d9\u05dd<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Python<\/strong>: \u05d4\u05d5\u05e8\u05d3 \u05d5\u05d4\u05ea\u05e7\u05df \u05d0\u05ea Python \u05de\u05d4\u05d0\u05ea\u05e8 \u05d4\u05e8\u05e9\u05de\u05d9: <a href=\"https:\/\/www.python.org\/downloads\/\">Python Downloads<\/a>.<\/li>\n\n\n\n<li><strong>Node.js<\/strong>: \u05d4\u05d5\u05e8\u05d3 \u05d5\u05d4\u05ea\u05e7\u05df \u05d0\u05ea Node.js \u05de\u05d4\u05d0\u05ea\u05e8 \u05d4\u05e8\u05e9\u05de\u05d9: <a href=\"https:\/\/nodejs.org\/en\/download\/\">Node.js Downloads<\/a>.<\/li>\n\n\n\n<li><strong>Git<\/strong>: \u05d4\u05d5\u05e8\u05d3 \u05d5\u05d4\u05ea\u05e7\u05df \u05d0\u05ea Git: <a href=\"https:\/\/git-scm.com\/downloads\">Git Downloads<\/a>.<\/li>\n\n\n\n<li><strong>Visual Studio Code<\/strong>: \u05de\u05d5\u05de\u05dc\u05e5 \u05dc\u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05e2\u05d5\u05e8\u05da \u05e7\u05d5\u05d3 \u05db\u05de\u05d5 VS Code: <a href=\"https:\/\/code.visualstudio.com\/download\">VS Code Downloads<\/a>.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u05e9\u05dc\u05d1 2: \u05d9\u05e6\u05d9\u05e8\u05ea \u05e4\u05e8\u05d5\u05d9\u05e7\u05d8 Django<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u05e6\u05d5\u05e8 \u05ea\u05d9\u05e7\u05d9\u05d9\u05d4 \u05dc\u05e4\u05e8\u05d5\u05d9\u05e7\u05d8<\/strong>: \u05e4\u05ea\u05d7 \u05d0\u05ea \u05e9\u05d5\u05e8\u05ea \u05d4\u05e4\u05e7\u05d5\u05d3\u05d4 \u05d0\u05d5 \u05d4\u05d8\u05e8\u05de\u05d9\u05e0\u05dc \u05d5\u05d4\u05e7\u05dc\u05d3:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   mkdir library_project\n   cd library_project<\/code><\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u05e6\u05d5\u05e8 \u05e1\u05d1\u05d9\u05d1\u05d4 \u05d5\u05d9\u05e8\u05d8\u05d5\u05d0\u05dc\u05d9\u05ea<\/strong>:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   python -m venv venv<\/code><\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u05d4\u05e4\u05e2\u05dc \u05d0\u05ea \u05d4\u05e1\u05d1\u05d9\u05d1\u05d4 \u05d4\u05d5\u05d9\u05e8\u05d8\u05d5\u05d0\u05dc\u05d9\u05ea<\/strong>:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u05d1-Windows<\/strong>: <code>venv\\Scripts\\activate<\/code><\/li>\n\n\n\n<li><strong>\u05d1-macOS\/Linux<\/strong>: <code>source venv\/bin\/activate<\/code><\/li>\n<\/ul>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u05d4\u05ea\u05e7\u05df \u05d0\u05ea Django \u05d5-DRF<\/strong>:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   pip install django djangorestframework<\/code><\/pre>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li><strong>\u05e6\u05d5\u05e8 \u05e4\u05e8\u05d5\u05d9\u05e7\u05d8 Django<\/strong>:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   django-admin startproject backend .<\/code><\/pre>\n\n\n\n<ol start=\"6\" class=\"wp-block-list\">\n<li><strong>\u05e6\u05d5\u05e8 \u05d0\u05e4\u05dc\u05d9\u05e7\u05e6\u05d9\u05d4 \u05d1\u05e9\u05dd &quot;library&quot;<\/strong>:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   python manage.py startapp library<\/code><\/pre>\n\n\n\n<ol start=\"7\" class=\"wp-block-list\">\n<li><strong>\u05d4\u05d5\u05e1\u05e3 \u05d0\u05ea \u05d4\u05d0\u05e4\u05dc\u05d9\u05e7\u05e6\u05d9\u05d4 \u05d5\u05d4-DRF \u05dc\u05e7\u05d5\u05d1\u05e5 \u05d4\u05d4\u05d2\u05d3\u05e8\u05d5\u05ea<\/strong>: \u05e2\u05e8\u05d5\u05da \u05d0\u05ea \u05d4\u05e7\u05d5\u05d1\u05e5 <code>backend\/settings.py<\/code> \u05d5\u05d4\u05d5\u05e1\u05e3 \u05d0\u05ea 'rest_framework' \u05d5-'library' \u05dc-<code>INSTALLED_APPS<\/code>:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   INSTALLED_APPS = &#91;\n       'django.contrib.admin',\n       'django.contrib.auth',\n       'django.contrib.contenttypes',\n       'django.contrib.sessions',\n       'django.contrib.messages',\n       'django.contrib.staticfiles',\n       'rest_framework',\n       'library',\n   ]<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u05e9\u05dc\u05d1 3: \u05d4\u05d2\u05d3\u05e8\u05ea \u05de\u05d5\u05d3\u05dc\u05d9\u05dd (Models)<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u05e4\u05ea\u05d7 \u05d0\u05ea \u05d4\u05e7\u05d5\u05d1\u05e5 <code>library\/models.py<\/code><\/strong> \u05d5\u05d4\u05d5\u05e1\u05e3 \u05d0\u05ea \u05d4\u05e7\u05d5\u05d3 \u05d4\u05d1\u05d0:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   from django.db import models\n\n   class Subscriber(models.Model):\n       name = models.CharField(max_length=100)\n       children_count = models.PositiveIntegerField()\n\n       def __str__(self):\n           return self.name\n\n   class Book(models.Model):\n       title = models.CharField(max_length=200)\n       author = models.CharField(max_length=100)\n       copies_available = models.PositiveIntegerField(default=1)\n\n       def __str__(self):\n           return self.title\n\n   class Loan(models.Model):\n       subscriber = models.ForeignKey(Subscriber, on_delete=models.CASCADE)\n       book = models.ForeignKey(Book, on_delete=models.CASCADE)\n       loan_date = models.DateField(auto_now_add=True)\n\n       def __str__(self):\n           return f\"{self.subscriber.name} borrowed {self.book.title}\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u05d4\u05e1\u05d1\u05e8<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Subscriber<\/strong>: \u05de\u05d5\u05d3\u05dc \u05d4\u05de\u05d9\u05d9\u05e6\u05d2 \u05de\u05e0\u05d5\u05d9, \u05e2\u05dd \u05e9\u05dd \u05d5\u05de\u05e1\u05e4\u05e8 \u05d9\u05dc\u05d3\u05d9\u05dd.<\/li>\n\n\n\n<li><strong>Book<\/strong>: \u05de\u05d5\u05d3\u05dc \u05d4\u05de\u05d9\u05d9\u05e6\u05d2 \u05e1\u05e4\u05e8, \u05e2\u05dd \u05db\u05d5\u05ea\u05e8\u05ea, \u05de\u05d7\u05d1\u05e8 \u05d5\u05de\u05e1\u05e4\u05e8 \u05e2\u05d5\u05ea\u05e7\u05d9\u05dd \u05d6\u05de\u05d9\u05e0\u05d9\u05dd.<\/li>\n\n\n\n<li><strong>Loan<\/strong>: \u05de\u05d5\u05d3\u05dc \u05d4\u05de\u05d9\u05d9\u05e6\u05d2 \u05d4\u05e9\u05d0\u05dc\u05d4 \u05e9\u05dc \u05e1\u05e4\u05e8 \u05e2\u05dc \u05d9\u05d3\u05d9 \u05de\u05e0\u05d5\u05d9, \u05db\u05d5\u05dc\u05dc \u05ea\u05d0\u05e8\u05d9\u05da \u05d4\u05d4\u05e9\u05d0\u05dc\u05d4.<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u05d1\u05d9\u05e6\u05d5\u05e2 \u05de\u05d9\u05d2\u05e8\u05e6\u05d9\u05d5\u05ea<\/strong>:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u05e6\u05d5\u05e8 \u05e7\u05d1\u05e6\u05d9 \u05de\u05d9\u05d2\u05e8\u05e6\u05d9\u05d4<\/strong>: <code>python manage.py makemigrations<\/code><\/li>\n\n\n\n<li><strong>\u05d4\u05d7\u05dc \u05d0\u05ea \u05d4\u05de\u05d9\u05d2\u05e8\u05e6\u05d9\u05d5\u05ea<\/strong>: <code>python manage.py migrate<\/code><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u05e9\u05dc\u05d1 4: \u05d9\u05e6\u05d9\u05e8\u05ea Serializers<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u05e6\u05d5\u05e8 \u05e7\u05d5\u05d1\u05e5 \u05d1\u05e9\u05dd <code>library\/serializers.py<\/code><\/strong> \u05d5\u05d4\u05d5\u05e1\u05e3 \u05d0\u05ea \u05d4\u05e7\u05d5\u05d3:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   from rest_framework import serializers\n   from .models import Subscriber, Book, Loan\n\n   class SubscriberSerializer(serializers.ModelSerializer):\n       class Meta:\n           model = Subscriber\n           fields = '__all__'\n\n   class BookSerializer(serializers.ModelSerializer):\n       class Meta:\n           model = Book\n           fields = '__all__'\n\n   class LoanSerializer(serializers.ModelSerializer):\n       class Meta:\n           model = Loan\n           fields = '__all__'\n\n       def validate(self, data):\n           subscriber = data&#91;'subscriber']\n           loans_count = Loan.objects.filter(subscriber=subscriber).count()\n           if loans_count &gt;= subscriber.children_count:\n               raise serializers.ValidationError('\u05d4\u05de\u05e0\u05d5\u05d9 \u05d4\u05d2\u05d9\u05e2 \u05dc\u05de\u05e1\u05e4\u05e8 \u05d4\u05d4\u05e9\u05d0\u05dc\u05d5\u05ea \u05d4\u05de\u05e7\u05e1\u05d9\u05de\u05dc\u05d9.')\n           return data<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u05d4\u05e1\u05d1\u05e8<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Serializers<\/strong> \u05de\u05e9\u05de\u05e9\u05d9\u05dd \u05dc\u05d4\u05de\u05e8\u05ea \u05de\u05d5\u05d3\u05dc\u05d9\u05dd \u05dc\u05e4\u05d5\u05e8\u05de\u05d8 JSON \u05d5\u05dc\u05d4\u05d9\u05e4\u05da.<\/li>\n\n\n\n<li>\u05d1-<code>LoanSerializer<\/code> \u05d4\u05d5\u05e1\u05e4\u05e0\u05d5 \u05d5\u05dc\u05d9\u05d3\u05e6\u05d9\u05d4 \u05db\u05d3\u05d9 \u05dc\u05d5\u05d5\u05d3\u05d0 \u05e9\u05de\u05e0\u05d5\u05d9 \u05dc\u05d0 \u05d9\u05db\u05d5\u05dc \u05dc\u05d4\u05e9\u05d0\u05d9\u05dc \u05d9\u05d5\u05ea\u05e8 \u05e1\u05e4\u05e8\u05d9\u05dd \u05de\u05d4\u05de\u05d5\u05ea\u05e8 \u05dc\u05d5.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u05e9\u05dc\u05d1 5: \u05d9\u05e6\u05d9\u05e8\u05ea ViewSets<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u05e2\u05e8\u05d5\u05da \u05d0\u05ea \u05d4\u05e7\u05d5\u05d1\u05e5 <code>library\/views.py<\/code><\/strong> \u05d5\u05d4\u05d5\u05e1\u05e3 \u05d0\u05ea \u05d4\u05e7\u05d5\u05d3:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   from rest_framework import viewsets\n   from .models import Subscriber, Book, Loan\n   from .serializers import SubscriberSerializer, BookSerializer, LoanSerializer\n\n   class SubscriberViewSet(viewsets.ModelViewSet):\n       queryset = Subscriber.objects.all()\n       serializer_class = SubscriberSerializer\n\n   class BookViewSet(viewsets.ModelViewSet):\n       queryset = Book.objects.all()\n       serializer_class = BookSerializer\n\n   class LoanViewSet(viewsets.ModelViewSet):\n       queryset = Loan.objects.all()\n       serializer_class = LoanSerializer<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u05d4\u05e1\u05d1\u05e8<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>ViewSets<\/strong> \u05de\u05e1\u05e4\u05e7\u05d9\u05dd \u05e4\u05e2\u05d5\u05dc\u05d5\u05ea CRUD \u05dc\u05de\u05d5\u05d3\u05dc\u05d9\u05dd \u05e9\u05dc\u05e0\u05d5.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u05e9\u05dc\u05d1 6: \u05d4\u05d2\u05d3\u05e8\u05ea \u05d4\u05e0\u05ea\u05d9\u05d1\u05d9\u05dd (URLs)<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u05e6\u05d5\u05e8 \u05e7\u05d5\u05d1\u05e5 \u05d1\u05e9\u05dd <code>library\/urls.py<\/code><\/strong> \u05d5\u05d4\u05d5\u05e1\u05e3:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   from django.urls import path, include\n   from rest_framework import routers\n   from .views import SubscriberViewSet, BookViewSet, LoanViewSet\n\n   router = routers.DefaultRouter()\n   router.register(r'subscribers', SubscriberViewSet)\n   router.register(r'books', BookViewSet)\n   router.register(r'loans', LoanViewSet)\n\n   urlpatterns = &#91;\n       path('', include(router.urls)),\n   ]<\/code><\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u05e2\u05d3\u05db\u05df \u05d0\u05ea <code>backend\/urls.py<\/code><\/strong> \u05db\u05d3\u05d9 \u05dc\u05db\u05dc\u05d5\u05dc \u05d0\u05ea \u05d4\u05e0\u05ea\u05d9\u05d1\u05d9\u05dd \u05e9\u05dc \u05d4\u05d0\u05e4\u05dc\u05d9\u05e7\u05e6\u05d9\u05d4:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   from django.contrib import admin\n   from django.urls import path, include\n\n   urlpatterns = &#91;\n       path('admin\/', admin.site.urls),\n       path('api\/', include('library.urls')),\n   ]<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u05e9\u05dc\u05d1 7: \u05d4\u05d2\u05d3\u05e8\u05ea CORS<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u05d4\u05ea\u05e7\u05df \u05d0\u05ea \u05d4\u05d7\u05d1\u05d9\u05dc\u05d4 <code>django-cors-headers<\/code><\/strong>:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   pip install django-cors-headers<\/code><\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u05d4\u05d5\u05e1\u05e3 \u05dc-<code>INSTALLED_APPS<\/code> \u05d1-<code>backend\/settings.py<\/code><\/strong>:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   INSTALLED_APPS = &#91;\n       ...\n       'corsheaders',\n   ]<\/code><\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u05d4\u05d5\u05e1\u05e3 \u05d0\u05ea \u05d4-Middleware<\/strong>:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   MIDDLEWARE = &#91;\n       'corsheaders.middleware.CorsMiddleware',\n       ...\n   ]<\/code><\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u05d0\u05e4\u05e9\u05e8 \u05d2\u05d9\u05e9\u05d4 \u05de\u05db\u05dc \u05d4\u05de\u05e7\u05d5\u05e8\u05d5\u05ea<\/strong>:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   CORS_ALLOW_ALL_ORIGINS = True<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u05e9\u05dc\u05d1 8: \u05d4\u05e8\u05e6\u05ea \u05e9\u05e8\u05ea Django<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u05d4\u05e4\u05e2\u05dc \u05d0\u05ea \u05d4\u05e9\u05e8\u05ea<\/strong>:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   python manage.py runserver<\/code><\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u05d1\u05d3\u05d9\u05e7\u05d4<\/strong>: \u05d2\u05e9 \u05dc\u05d3\u05e4\u05d3\u05e4\u05df \u05dc\u05db\u05ea\u05d5\u05d1\u05ea <a href=\"http:\/\/localhost:8000\/api\/\">http:\/\/localhost:8000\/api\/<\/a> \u05d5\u05ea\u05e8\u05d0\u05d4 \u05d0\u05ea \u05d4-API.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u05e9\u05dc\u05d1 9: \u05d9\u05e6\u05d9\u05e8\u05ea \u05e4\u05e8\u05d5\u05d9\u05e7\u05d8 React \u05e2\u05dd TypeScript<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u05d1\u05d8\u05e8\u05de\u05d9\u05e0\u05dc \u05d7\u05d3\u05e9<\/strong>, \u05d1\u05ea\u05d9\u05e7\u05d9\u05d9\u05ea \u05d4\u05e4\u05e8\u05d5\u05d9\u05e7\u05d8, \u05d4\u05e8\u05e5:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   npx create-react-app frontend --template typescript<\/code><\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u05d4\u05ea\u05e7\u05df \u05d0\u05ea axios<\/strong>:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   cd frontend\n   npm install axios<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u05e9\u05dc\u05d1 10: \u05d1\u05e0\u05d9\u05d9\u05ea \u05d4-Frontend<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u05d9\u05e6\u05d9\u05e8\u05ea \u05e1\u05d5\u05d2\u05d9\u05dd (Types)<\/strong>:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u05e6\u05d5\u05e8 \u05ea\u05d9\u05e7\u05d9\u05d9\u05d4 <code>src\/types<\/code><\/strong>.<\/li>\n\n\n\n<li><strong>\u05e6\u05d5\u05e8 \u05e7\u05d5\u05d1\u05e5 <code>types.ts<\/code><\/strong> \u05e2\u05dd \u05d4\u05ea\u05d5\u05db\u05df: <code>export interface Subscriber { id?: number; name: string; children_count: number; } export interface Book { id?: number; title: string; author: string; copies_available: number; } export interface Loan { id?: number; subscriber: number; book: number; loan_date?: string; }<\/code><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u05d9\u05e6\u05d9\u05e8\u05ea \u05e9\u05d9\u05e8\u05d5\u05ea API<\/strong>:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u05e6\u05d5\u05e8 \u05ea\u05d9\u05e7\u05d9\u05d9\u05d4 <code>src\/services<\/code><\/strong>.<\/li>\n\n\n\n<li><strong>\u05e6\u05d5\u05e8 \u05e7\u05d5\u05d1\u05e5 <code>api.ts<\/code><\/strong> \u05e2\u05dd \u05d4\u05ea\u05d5\u05db\u05df: <code>import axios from 'axios'; const api = axios.create({ baseURL: 'http:\/\/localhost:8000\/api\/', }); export default api;<\/code><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u05d9\u05e6\u05d9\u05e8\u05ea \u05e8\u05db\u05d9\u05d1\u05d9\u05dd (Components)<\/strong>:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u05e6\u05d5\u05e8 \u05ea\u05d9\u05e7\u05d9\u05d9\u05d4 <code>src\/components<\/code><\/strong>.<\/li>\n\n\n\n<li><strong>\u05e6\u05d5\u05e8 \u05e8\u05db\u05d9\u05d1 <code>BookList.tsx<\/code><\/strong>: <code>import React, { useEffect, useState } from 'react'; import api from '..\/services\/api'; import { Book } from '..\/types\/types'; const BookList: React.FC = () => { const [books, setBooks] = useState&lt;Book[]>([]); useEffect(() => { api.get&lt;Book[]>('books\/').then(response => { setBooks(response.data); }); }, []); return ( &lt;div> &lt;h2>\u05e8\u05e9\u05d9\u05de\u05ea \u05e1\u05e4\u05e8\u05d9\u05dd&lt;\/h2> &lt;ul> {books.map(book => ( &lt;li key={book.id}> {book.title} \u05de\u05d0\u05ea {book.author} - \u05e2\u05d5\u05ea\u05e7\u05d9\u05dd \u05d6\u05de\u05d9\u05e0\u05d9\u05dd: {book.copies_available} &lt;\/li> ))} &lt;\/ul> &lt;\/div> ); }; export default BookList;<\/code><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u05e2\u05d3\u05db\u05d5\u05df <code>App.tsx<\/code><\/strong>:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   import React from 'react';\n   import BookList from '.\/components\/BookList';\n\n   function App() {\n     return (\n       &lt;div className=\"App\"&gt;\n         &lt;h1&gt;\u05de\u05e2\u05e8\u05db\u05ea \u05d4\u05e9\u05d0\u05dc\u05ea \u05e1\u05e4\u05e8\u05d9\u05dd&lt;\/h1&gt;\n         &lt;BookList \/&gt;\n       &lt;\/div&gt;\n     );\n   }\n\n   export default App;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u05e9\u05dc\u05d1 11: \u05d4\u05e8\u05e6\u05ea \u05d0\u05e4\u05dc\u05d9\u05e7\u05e6\u05d9\u05d9\u05ea React<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u05d4\u05e4\u05e2\u05dc \u05d0\u05ea \u05d4\u05d0\u05e4\u05dc\u05d9\u05e7\u05e6\u05d9\u05d4<\/strong>:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   npm start<\/code><\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u05d1\u05d3\u05d9\u05e7\u05d4<\/strong>: \u05d2\u05e9 \u05dc\u05d3\u05e4\u05d3\u05e4\u05df \u05dc\u05db\u05ea\u05d5\u05d1\u05ea <a href=\"http:\/\/localhost:3000\">http:\/\/localhost:3000<\/a> \u05d5\u05ea\u05e8\u05d0\u05d4 \u05d0\u05ea \u05e8\u05e9\u05d9\u05de\u05ea \u05d4\u05e1\u05e4\u05e8\u05d9\u05dd.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u05e9\u05dc\u05d1 12: \u05d4\u05d5\u05e1\u05e4\u05ea \u05e8\u05db\u05d9\u05d1\u05d9\u05dd \u05e0\u05d5\u05e1\u05e4\u05d9\u05dd<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u05e8\u05e9\u05d9\u05de\u05ea \u05de\u05e0\u05d5\u05d9\u05d9\u05dd (<code>SubscriberList.tsx<\/code>)<\/strong>:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   import React, { useEffect, useState } from 'react';\n   import api from '..\/services\/api';\n   import { Subscriber } from '..\/types\/types';\n\n   const SubscriberList: React.FC = () =&gt; {\n     const &#91;subscribers, setSubscribers] = useState&lt;Subscriber&#91;]&gt;(&#91;]);\n\n     useEffect(() =&gt; {\n       api.get&lt;Subscriber&#91;]&gt;('subscribers\/').then(response =&gt; {\n         setSubscribers(response.data);\n       });\n     }, &#91;]);\n\n     return (\n       &lt;div&gt;\n         &lt;h2&gt;\u05e8\u05e9\u05d9\u05de\u05ea \u05de\u05e0\u05d5\u05d9\u05d9\u05dd&lt;\/h2&gt;\n         &lt;ul&gt;\n           {subscribers.map(subscriber =&gt; (\n             &lt;li key={subscriber.id}&gt;\n               {subscriber.name} - \u05de\u05e1\u05e4\u05e8 \u05d9\u05dc\u05d3\u05d9\u05dd: {subscriber.children_count}\n             &lt;\/li&gt;\n           ))}\n         &lt;\/ul&gt;\n       &lt;\/div&gt;\n     );\n   };\n\n   export default SubscriberList;<\/code><\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u05d4\u05d5\u05e1\u05e4\u05ea \u05de\u05e0\u05d5\u05d9 \u05d7\u05d3\u05e9 (<code>AddSubscriber.tsx<\/code>)<\/strong>:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   import React, { useState } from 'react';\n   import api from '..\/services\/api';\n   import { Subscriber } from '..\/types\/types';\n\n   const AddSubscriber: React.FC = () =&gt; {\n     const &#91;name, setName] = useState('');\n     const &#91;childrenCount, setChildrenCount] = useState(0);\n\n     const handleSubmit = (e: React.FormEvent) =&gt; {\n       e.preventDefault();\n       const newSubscriber: Subscriber = { name, children_count: childrenCount };\n       api.post('subscribers\/', newSubscriber).then(response =&gt; {\n         alert('\u05de\u05e0\u05d5\u05d9 \u05e0\u05d5\u05e1\u05e3 \u05d1\u05d4\u05e6\u05dc\u05d7\u05d4!');\n       });\n     };\n\n     return (\n       &lt;form onSubmit={handleSubmit}&gt;\n         &lt;h2&gt;\u05d4\u05d5\u05e1\u05e3 \u05de\u05e0\u05d5\u05d9&lt;\/h2&gt;\n         &lt;label&gt;\n           \u05e9\u05dd:\n           &lt;input type=\"text\" value={name} onChange={e =&gt; setName(e.target.value)} \/&gt;\n         &lt;\/label&gt;\n         &lt;br \/&gt;\n         &lt;label&gt;\n           \u05de\u05e1\u05e4\u05e8 \u05d9\u05dc\u05d3\u05d9\u05dd:\n           &lt;input type=\"number\" value={childrenCount} onChange={e =&gt; setChildrenCount(parseInt(e.target.value))} \/&gt;\n         &lt;\/label&gt;\n         &lt;br \/&gt;\n         &lt;button type=\"submit\"&gt;\u05d4\u05d5\u05e1\u05e3&lt;\/button&gt;\n       &lt;\/form&gt;\n     );\n   };\n\n   export default AddSubscriber;<\/code><\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u05e2\u05d3\u05db\u05d5\u05df <code>App.tsx<\/code><\/strong>:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   import React from 'react';\n   import BookList from '.\/components\/BookList';\n   import SubscriberList from '.\/components\/SubscriberList';\n   import AddSubscriber from '.\/components\/AddSubscriber';\n\n   function App() {\n     return (\n       &lt;div className=\"App\"&gt;\n         &lt;h1&gt;\u05de\u05e2\u05e8\u05db\u05ea \u05d4\u05e9\u05d0\u05dc\u05ea \u05e1\u05e4\u05e8\u05d9\u05dd&lt;\/h1&gt;\n         &lt;AddSubscriber \/&gt;\n         &lt;SubscriberList \/&gt;\n         &lt;BookList \/&gt;\n       &lt;\/div&gt;\n     );\n   }\n\n   export default App;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u05e9\u05dc\u05d1 13: \u05d4\u05d5\u05e1\u05e4\u05ea \u05d4\u05e9\u05d0\u05dc\u05d5\u05ea<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u05e8\u05db\u05d9\u05d1 \u05d4\u05e9\u05d0\u05dc\u05ea \u05e1\u05e4\u05e8 (<code>LoanBook.tsx<\/code>)<\/strong>:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   import React, { useState, useEffect } from 'react';\n   import api from '..\/services\/api';\n   import { Subscriber, Book, Loan } from '..\/types\/types';\n\n   const LoanBook: React.FC = () =&gt; {\n     const &#91;subscribers, setSubscribers] = useState&lt;Subscriber&#91;]&gt;(&#91;]);\n     const &#91;books, setBooks] = useState&lt;Book&#91;]&gt;(&#91;]);\n     const &#91;selectedSubscriber, setSelectedSubscriber] = useState&lt;number | null&gt;(null);\n     const &#91;selectedBook, setSelectedBook] = useState&lt;number | null&gt;(null);\n\n     useEffect(() =&gt; {\n       api.get&lt;Subscriber&#91;]&gt;('subscribers\/').then(response =&gt; {\n         setSubscribers(response.data);\n       });\n       api.get&lt;Book&#91;]&gt;('books\/').then(response =&gt; {\n         setBooks(response.data);\n       });\n     }, &#91;]);\n\n     const handleSubmit = (e: React.FormEvent) =&gt; {\n       e.preventDefault();\n       if (selectedSubscriber &amp;&amp; selectedBook) {\n         const newLoan: Loan = { subscriber: selectedSubscriber, book: selectedBook };\n         api.post('loans\/', newLoan).then(response =&gt; {\n           alert('\u05e1\u05e4\u05e8 \u05d4\u05d5\u05e9\u05d0\u05dc \u05d1\u05d4\u05e6\u05dc\u05d7\u05d4!');\n         }).catch(error =&gt; {\n           alert('\u05e9\u05d2\u05d9\u05d0\u05d4: ' + error.response.data.detail);\n         });\n       }\n     };\n\n     return (\n       &lt;form onSubmit={handleSubmit}&gt;\n         &lt;h2&gt;\u05d4\u05e9\u05d0\u05dc\u05ea \u05e1\u05e4\u05e8&lt;\/h2&gt;\n         &lt;label&gt;\n           \u05de\u05e0\u05d5\u05d9:\n           &lt;select onChange={e =&gt; setSelectedSubscriber(parseInt(e.target.value))}&gt;\n             &lt;option value=\"\"&gt;\u05d1\u05d7\u05e8 \u05de\u05e0\u05d5\u05d9&lt;\/option&gt;\n             {subscribers.map(subscriber =&gt; (\n               &lt;option key={subscriber.id} value={subscriber.id}&gt;{subscriber.name}&lt;\/option&gt;\n             ))}\n           &lt;\/select&gt;\n         &lt;\/label&gt;\n         &lt;br \/&gt;\n         &lt;label&gt;\n           \u05e1\u05e4\u05e8:\n           &lt;select onChange={e =&gt; setSelectedBook(parseInt(e.target.value))}&gt;\n             &lt;option value=\"\"&gt;\u05d1\u05d7\u05e8 \u05e1\u05e4\u05e8&lt;\/option&gt;\n             {books.map(book =&gt; (\n               &lt;option key={book.id} value={book.id}&gt;{book.title}&lt;\/option&gt;\n             ))}\n           &lt;\/select&gt;\n         &lt;\/label&gt;\n         &lt;br \/&gt;\n         &lt;button type=\"submit\"&gt;\u05d4\u05e9\u05d0\u05dc&lt;\/button&gt;\n       &lt;\/form&gt;\n     );\n   };\n\n   export default LoanBook;<\/code><\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u05e2\u05d3\u05db\u05d5\u05df <code>App.tsx<\/code> \u05dc\u05d4\u05db\u05dc\u05dc\u05ea \u05e8\u05db\u05d9\u05d1 \u05d4\u05d4\u05e9\u05d0\u05dc\u05d4<\/strong>:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code>   import React from 'react';\n   import BookList from '.\/components\/BookList';\n   import SubscriberList from '.\/components\/SubscriberList';\n   import AddSubscriber from '.\/components\/AddSubscriber';\n   import LoanBook from '.\/components\/LoanBook';\n\n   function App() {\n     return (\n       &lt;div className=\"App\"&gt;\n         &lt;h1&gt;\u05de\u05e2\u05e8\u05db\u05ea \u05d4\u05e9\u05d0\u05dc\u05ea \u05e1\u05e4\u05e8\u05d9\u05dd&lt;\/h1&gt;\n         &lt;AddSubscriber \/&gt;\n         &lt;SubscriberList \/&gt;\n         &lt;BookList \/&gt;\n         &lt;LoanBook \n       &lt;\/div&gt;\n     );\n   }\n\n   export default App;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u05e9\u05dc\u05d1 14: \u05d1\u05d3\u05d9\u05e7\u05d4 \u05d5\u05e1\u05d9\u05db\u05d5\u05dd<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u05d4\u05e4\u05e2\u05dc \u05d0\u05ea \u05e9\u05e8\u05ea Django \u05d5\u05d0\u05ea \u05d0\u05e4\u05dc\u05d9\u05e7\u05e6\u05d9\u05d9\u05ea React<\/strong>.<\/li>\n\n\n\n<li><strong>\u05d1\u05d3\u05d5\u05e7 \u05d0\u05ea \u05d4\u05e4\u05d5\u05e0\u05e7\u05e6\u05d9\u05d5\u05e0\u05dc\u05d9\u05d5\u05ea<\/strong>:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u05d4\u05d5\u05e1\u05e3 \u05de\u05e0\u05d5\u05d9\u05d9\u05dd \u05d5\u05e1\u05e4\u05e8\u05d9\u05dd.<\/li>\n\n\n\n<li>\u05e0\u05e1\u05d4 \u05dc\u05d4\u05e9\u05d0\u05d9\u05dc \u05e1\u05e4\u05e8 \u05dc\u05de\u05e0\u05d5\u05d9.<\/li>\n\n\n\n<li>\u05d5\u05d3\u05d0 \u05e9\u05d4\u05de\u05e2\u05e8\u05db\u05ea \u05de\u05d5\u05e0\u05e2\u05ea \u05d4\u05e9\u05d0\u05dc\u05d4 \u05de\u05e2\u05d1\u05e8 \u05dc\u05de\u05e1\u05e4\u05e8 \u05d4\u05de\u05d5\u05ea\u05e8.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u05e1\u05d9\u05db\u05d5\u05dd<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u05d9\u05e6\u05e8\u05e0\u05d5 \u05d0\u05e4\u05dc\u05d9\u05e7\u05e6\u05d9\u05d9\u05ea Django \u05d5-React \u05de\u05dc\u05d0\u05d4 \u05d4\u05de\u05d3\u05de\u05d4 \u05de\u05e2\u05e8\u05db\u05ea \u05d4\u05e9\u05d0\u05dc\u05ea \u05e1\u05e4\u05e8\u05d9\u05dd \u05de\u05d4\u05e1\u05e4\u05e8\u05d9\u05d9\u05d4. \u05d4\u05e1\u05d1\u05e8\u05e0\u05d5 \u05db\u05dc \u05e9\u05dc\u05d1 \u05d1\u05e4\u05d9\u05e8\u05d5\u05d8, \u05d5\u05d4\u05e6\u05d2\u05e0\u05d5 \u05d0\u05ea \u05d4\u05e7\u05d5\u05d3 \u05d4\u05de\u05dc\u05d0 \u05d4\u05e0\u05d3\u05e8\u05e9 \u05dc\u05d1\u05e0\u05d9\u05d9\u05d4 \u05d5\u05d4\u05e4\u05e2\u05dc\u05d4 \u05e9\u05dc \u05d4\u05e4\u05e8\u05d5\u05d9\u05e7\u05d8. \u05d4\u05e9\u05ea\u05de\u05e9\u05e0\u05d5 \u05d1-Django Rest Framework \u05dc\u05d9\u05e6\u05d9\u05e8\u05ea API \u05d5\u05d1-React \u05e2\u05dd TypeScript \u05dc\u05d9\u05e6\u05d9\u05e8\u05ea \u05de\u05de\u05e9\u05e7 \u05de\u05e9\u05ea\u05de\u05e9 \u05d0\u05d9\u05e0\u05d8\u05e8\u05d0\u05e7\u05d8\u05d9\u05d1\u05d9.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u05d4\u05e2\u05e8\u05d5\u05ea \u05e0\u05d5\u05e1\u05e4\u05d5\u05ea<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u05d0\u05d9\u05df \u05e6\u05d5\u05e8\u05da \u05d1\u05d9\u05d3\u05e2 \u05de\u05d5\u05e7\u05d3\u05dd \u05d1\u05ea\u05db\u05e0\u05d5\u05ea<\/strong>, \u05d0\u05da \u05d9\u05d9\u05ea\u05db\u05df \u05e9\u05ea\u05e6\u05d8\u05e8\u05da \u05dc\u05d7\u05e4\u05e9 \u05d1\u05d0\u05d9\u05e0\u05d8\u05e8\u05e0\u05d8 \u05dc\u05de\u05d9\u05d3\u05e2 \u05e0\u05d5\u05e1\u05e3 \u05e2\u05dc \u05db\u05dc\u05d9 \u05d4\u05e4\u05d9\u05ea\u05d5\u05d7.<\/li>\n\n\n\n<li><strong>\u05d0\u05dd \u05d0\u05ea\u05d4 \u05e0\u05ea\u05e7\u05dc \u05d1\u05e9\u05d2\u05d9\u05d0\u05d5\u05ea<\/strong>, \u05d5\u05d5\u05d3\u05d0 \u05e9\u05d4\u05ea\u05e7\u05e0\u05ea \u05d0\u05ea \u05db\u05dc \u05d4\u05ea\u05d5\u05db\u05e0\u05d5\u05ea \u05d4\u05e0\u05d3\u05e8\u05e9\u05d5\u05ea \u05d5\u05e9\u05d4\u05e7\u05d5\u05d3 \u05d4\u05d5\u05d6\u05df \u05db\u05e8\u05d0\u05d5\u05d9.<\/li>\n\n\n\n<li><strong>\u05dc\u05de\u05d9\u05d3\u05d4 \u05e0\u05d5\u05e1\u05e4\u05ea<\/strong>: \u05de\u05d5\u05de\u05dc\u05e5 \u05dc\u05dc\u05de\u05d5\u05d3 \u05d0\u05ea \u05d4\u05d9\u05e1\u05d5\u05d3\u05d5\u05ea \u05e9\u05dc Python, Django, JavaScript, \u05d5-React \u05db\u05d3\u05d9 \u05dc\u05d4\u05d1\u05d9\u05df \u05dc\u05e2\u05d5\u05de\u05e7 \u05d0\u05ea \u05d4\u05d0\u05e4\u05dc\u05d9\u05e7\u05e6\u05d9\u05d4.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\u05d4\u05e7\u05d3\u05de\u05d4 \u05d1\u05de\u05d3\u05e8\u05d9\u05da \u05d6\u05d4 \u05e0\u05d1\u05e0\u05d4 \u05d0\u05e4\u05dc\u05d9\u05e7\u05e6\u05d9\u05d4 \u05de\u05dc\u05d0\u05d4 \u05d4\u05de\u05e9\u05ea\u05de\u05e9\u05ea \u05d1-Django \u05dc\u05e9\u05e8\u05ea (Backend) \u05d5\u05d1-React \u05e2\u05dd TypeScript \u05dc\u05e6\u05d3 \u05d4\u05dc\u05e7\u05d5\u05d7 (Frontend). \u05d4\u05d0\u05e4\u05dc\u05d9\u05e7\u05e6\u05d9\u05d4 \u05ea\u05d3\u05de\u05d4 \u05de\u05e2\u05e8\u05db\u05ea \u05d4\u05e9\u05d0\u05dc\u05ea \u05e1\u05e4\u05e8\u05d9\u05dd \u05de\u05d4\u05e1\u05e4\u05e8\u05d9\u05d9\u05d4, \u05d5\u05ea\u05db\u05dc\u05d5\u05dc \u05e0\u05d9\u05d4\u05d5\u05dc \u05de\u05e0\u05d5\u05d9\u05d9\u05dd, \u05e1\u05e4\u05e8\u05d9\u05dd \u05d5\u05d4\u05e9\u05d0\u05dc\u05d5\u05ea. \u05e0\u05e9\u05ea\u05de\u05e9 \u05d1-Django Rest Framework (DRF) \u05db\u05d3\u05d9 \u05dc\u05d1\u05e0\u05d5\u05ea API \u05e9\u05d9\u05d0\u05e4\u05e9\u05e8 \u05ea\u05e7\u05e9\u05d5\u05e8\u05ea \u05d1\u05d9\u05df \u05d4-Backend \u05dc-Frontend. \u05e9\u05dc\u05d1 1: \u05d4\u05ea\u05e7\u05e0\u05ea \u05d4\u05db\u05dc\u05d9\u05dd \u05d4\u05e0\u05d3\u05e8\u05e9\u05d9\u05dd \u05e9\u05dc\u05d1 2: \u05d9\u05e6\u05d9\u05e8\u05ea \u05e4\u05e8\u05d5\u05d9\u05e7\u05d8 Django \u05e9\u05dc\u05d1 3: \u05d4\u05d2\u05d3\u05e8\u05ea \u05de\u05d5\u05d3\u05dc\u05d9\u05dd (Models) [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-120","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/bina-meira.co.il\/index.php?rest_route=\/wp\/v2\/posts\/120","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bina-meira.co.il\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bina-meira.co.il\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bina-meira.co.il\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bina-meira.co.il\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=120"}],"version-history":[{"count":2,"href":"https:\/\/bina-meira.co.il\/index.php?rest_route=\/wp\/v2\/posts\/120\/revisions"}],"predecessor-version":[{"id":122,"href":"https:\/\/bina-meira.co.il\/index.php?rest_route=\/wp\/v2\/posts\/120\/revisions\/122"}],"wp:attachment":[{"href":"https:\/\/bina-meira.co.il\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=120"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bina-meira.co.il\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=120"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bina-meira.co.il\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=120"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}