مقدمه
با سلام خدمت تمامی شما دانشپذیران خوب وبسایت پایتونی ها به دلیل استقبال بی نظیر شما از مقالات این وبسایت برآن شدیم تا با یک مقاله آموزشی در مورد Framework Rest در جنگو یک مینی پروژه کوچک برای شما ایجاد کنیم.
تعریف ساده Rest Framework به این صورت است که شما زمانی نیاز دارید که فقط از قسمت Front end وبسایت خود استفاده کنید اما نیاز می باشد از اطلاعاتی که در قسمت Backend وبسایت هم وجود دارد استفاده کنید برای این امر در برنامه نویسی وبسایت یک کتابخانه به نام Rest Framework وجود دارد که شما می توانید با استفاده از آن به راحتی اطلاعات مورد نیاز خود را از قسمت های Backend وبسایت واکشی(فراخوانی) کنید.
این مقاله ما را راهنمایی میکند که چگونه دقیقاً یک Rest API را با استفاده از Django Rest Framework بسازیم. Django Rest Framework (DRF) بر روی چارچوب جنگو از قبل نصب است و به دلیل جعبه ابزار منعطف و قدرتمندی که ارائه می دهد، برای ساخت API های وب Rest به خوبی قابلیت استفاده دارد. REST که مخفف representational state transfer است یک سبک نرم افزاری معماری است که دستورالعمل های طراحی و توسعه معماری شبکه اینترنت را مشخص می کند.
در این آموزش از فریم ورک جنگو Rest برای ساخت گام به گام یک API درجنگو استفاده خواهیم کرد.
چرا Django Rest Framework ؟
Django Rest Framework چندین مزیت را ارائه می دهد که برنامه نویسان آن را به سایر فریم ورک ها برای ساخت API ترجیح می دهند:
- به دلیل وجود API قابل مرور وب که ایجاد می کند، قابلیت استفاده را برای توسعه دهندگان افزایش می دهد.
- یک توسعهدهنده میتواند ابزارهای مختلف مانند سریالسازها و مجموعههای نمایش در فریم ورک را سفارشی کند و همچنان یک API کاملاً کاربردی ایجاد کند.
- مستندات آن به اندازه کافی جامع است تا حتی مبتدیان را در هر مرحله از ایجاد API راهنمایی کند.
راه اندازی ایزوله سازی ( مجازی سازی)
برای همتراز بودن با هر مرحله از مقاله، باید پایتون را در دستگاه خود نصب کرده باشید.
همچنین، virtualenv
با اجرای دستور زیر بر روی دستگاه خود، یک محیط مجازی برای پروژه شما ایجاد کنید.
pip install virtualenv
راهنمای ایجاد پروژه جنگو
cd را به ترمینال خود وارد کنید و یک دایرکتوری جدید برای کل پروژه ایجاد کنید. از این دستورات زیر استفاده کنید:
mkdir DRFproject cd DRFproject
ایجاد محیط مجازی
اکنون، ما یک محیط مجازی ایجاد می کنیم که هر زمان که روی پروژه ای کار می کنید ضروری است. این ابزار یک محیط مجازی پایتون مستقل برای وابستگی های مورد نیاز هر پروژه ایجاد می کند. پس از نصب virtualenv
ابزار، از این دستور برای ایجاد نام برای محیط مجازی خود استفاده کنید.
دستور زیر محیط مجازی در سیستم عامل ویندوز را فعال می کند.
virtualenv env
در صورت داشتن ارور در دستور بالا می توانید از دستور زیر نیز استفاده کنید:
env\Scripts\activate
برای اطمینان از فعال بودن محیط مجازی، باید نام آن را در داخل پرانتز مانند تصویر زیر مشاهده کنید.
راه اندازی جنگو
زمانی که در دایرکتوری DRFproject هستیم، جنگو و Django Rest Framework را نصب خواهیم کرد.
pip install django pip install djangorestframework
یک پروژه جنگو ایجاد کنید که نام آن را rest
و با استفاده از ابزار Django-admin پروژه جدید خود را ایجاد کنید:
django-admin startproject rest .
نقطه .
بعد از نام پروژه به ایجاد پروژه در همان پوشه DRFproject کمک می کند.
دستور زیر را برای اعمال مهاجرت های پایگاه داده به پایگاه داده پیش فرض db.sqlite3 اجرا کنید:
python manage.py migrate
در مرحله بعد، یک برنامه ایجاد کنید که در آن API از طریق دستور زیر ایجاد و مدیریت شود.
python manage.py startapp rest_api
ما باید برنامه جدید ایجاد شده و بقیه فریم ورک را به INSTALLED_APPS
بخش فایل settings.pyrest_api
در پروژه اضافه کنیم. برای جلوگیری از خطاهای غیرضروری در آینده، کامای انتهایی بعد از نام برنامه را فراموش نکنید.
# Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', #own 'rest_api', #third_party 'rest_framework', ]
ایجاد Django Rest API
ایجاد یک REST API شامل استفاده از اجزای مختلف چارچوب جنگو از جمله مدلها، نماها و سریالکنندهها است که به زودی به آنها خواهیم پرداخت می شود.
مقداردهی اولیه مدل
مدلها درست مانند جنگو جایی است که فیلدهای جدول پایگاه داده ما ایجاد میشوند. ما مدلی به نام Language
ایجاد خواهیم کرد که حاوی جزئیاتی در مورد زبان های برنامه نویسی مختلف است.
به فایل rest_api/models.py بروید و کد زیر را تایپ کنید.
from django.db import models # Create your models here. class Language(models.Model): name = models.CharField(max_length=100) paradigm = models.CharField(max_length=200) author = models.CharField(max_length=100) def _str_(self): return self.name
Language
فیلدهای مدل عبارتند از :
name
: نام یک زبان برنامه نویسی خاص.paradigm
: طبقه بندی زبان بر اساس ویژگی های آن.author
: بنیانگذار زبان.
روش _str_()
استفاده شده، یک ویژگی مدل پیش فرض را نمایش می دهد. ویژگی name در این حالت برگردانده می شود.
مهاجرت های اولیه را به مدل اجرا کنید تا آن را با طرح پایگاه داده همگام سازی کنید.
python manage.py makemigrations python manage.py migrate
صفحه مدیریت جنگو
جنگو دارای یک رابط کاربری داخلی است که به مدیران و کاربران تأیید شده اجازه می دهد تا مستقیماً با اشیاء مدل تعریف شده کار کنند.
مدل در اینجا در rest_api/admin.py با انتقال نام مدل به admin.site.register()
تابع ثبت می شود.
from django.contrib import admin from .models import Language # Register your models here. class LanguageAdmin(admin.ModelAdmin): list = ('name', 'paradigm', 'author') admin.site.register(Language)
کار با سریال سازها
Serializer چارچوبی است که مجموعه های کوئری پیچیده و اشیاء مدل را به انواع داده پایتون تبدیل می کند. از این نوع دادههای بومی پایتون، فرمتهای داده JSON، XML به راحتی برای مشتری ارائه میشوند. این تبدیل به عنوان سریال سازی نامیده می شود. این چارچوب همچنین از طریق deserialization معکوس را انجام میدهد، جایی که دادهها اعتبارسنجی میشوند و سپس به فرمت پیچیدهای مانند مجموعههای پرسشی تبدیل میشوند. سریال سازها پیاده سازی مشابهی با فرم های جنگو دارند.
سریال سازها از یک کلاس سریال ساز استفاده می کنند که به مدل جنگو نگاشت می شود. در این مورد، ما از ModelSerializer
کلاسی استفاده خواهیم کرد که امکان ایجاد خودکار یک کلاس سریالساز را فراهم میکند که حاوی فیلدهای مربوط به فیلدهای Model است.
همچنین به طور خودکار اعتبار سنجی برای سریال ساز ایجاد می کند. بهطور پیشفرض، اجراها را ModelSerializer
شامل .create()
میشود ، .update()
بنابراین نیازی به تعریف دوباره آنها نخواهد بود.
یک فایل serializers.py در پوشه rest_api ایجاد کنید و کد زیر را در آن تایپ کنید:
from rest_framework import serializers from rest_api.models import Language class LanguageSerializer(serializers.ModelSerializer): class Meta: model = Language fields = '__all__'
ویژگی fields تمام فیلدهای مدل تعریف شده را برمی گرداند.
در جایی که نیاز دارید فقط فیلدهای خاصی را از مدل نمایش دهید، می توانید چندین فیلد مدل خاص را که نیاز دارید، به عنوان ویژگی فیلدها تعریف کنید.
تعریف ViewSets
بعد، یک ViewSet برای API ایجاد می کنیم.
ViewSet یک نمای واحد مبتنی بر کلاس است که منطق همه نماهای مرتبط در چارچوب جنگو REST را ترکیب می کند.
این برنامه اقدامات .list()
و .create()
اقداماتی را ارائه می دهد که از طریق آنها اشیاء پایتون از پایگاه داده بازیابی می شوند و اشیاء بیشتری ایجاد می شوند.
کلاس به دلایل زیر به ViewSet
کلاس ترجیح داده می شود . View
- ما فقط باید
queryset
یک بار را تعریف می کنیم، بنابراین تکرار منطقی در یک کلاس ترکیب می شود. - روترهایی که برای ثبت نماها نیاز داریم، نیاز به تنظیم URL conf را از بین خواهند برد.
- ViewSets برای توسعه سریع مفید هستند، به خصوص در هنگام توسعه API های بزرگ.
ما از ModelViewSet
استفاده می کنیم که یک رفتار پیش فرض را به عنوان یک کلاس پایه موجود ارائه می دهد.
در views.py ، این کد را بنویسید.
from django.shortcuts import render from .models import Language from .serializers import LanguageSerializer from rest_framework import viewsets # Create your views here. class LanguageViewSet(viewsets.ModelViewSet): serializer_class = LanguageSerializer queryset = Language.objects.all()
اکنون Viewset ایجاد شده را به عنوان URL ثبت کنید. وقتی یک الگو به مرورگر ارائه میشود، URL درخواستهای نماها را برمیگرداند.
یک فایل urls.py در پوشه rest_api ایجاد کنید و کد زیر را اضافه کنید.
from rest_api.views import LanguageViewSet from rest_framework.routers import DefaultRouter from rest_api import views router = DefaultRouter() router.register(r'languages', views.LanguageViewSet, basename='language') urlpatterns = router.urls
در router.urls
اینجا مسیریابی API ما را فراهم می کند.
در نهایت، بیایید URL های برنامه خود را در URL های پروژه در rest/urls.py قرار دهیم .
ما یک نقطه پایانی تعریف می کنیم که از طریق آن به برنامه rest_api خود دسترسی پیدا می کنیم و فایل urls.py آن را مطابق شکل زیر درج می کنیم.
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('rest_api/', include('rest_api.urls')) ]
اجرای API
زمان آن فرا رسیده است که API را در زمان واقعی ببینیم!
دستور زیر را تایپ کنید تا سرور محلی از جایی که API ایجاد و رندر می شود اجرا شود.
python manage.py runserver
اگر به درستی راهنما را دنبال کردید و قطعات کد را مطابق شکل اضافه کردید، باید یک API قابل مرور مانند این را در مرورگر خود مشاهده کنید.
کلیک کنید و لینک را دنبال کنید. مرورگر باید چنین صفحه ای را نمایش دهد. از اینجا می توانید جزئیات را به فیلدهای API اضافه کنید و آنها را در پایگاه داده پست کنید.
ما می توانیم با افزودن یک نقطه پایانی شناسه خاص به URL در مرورگر برای درخواست داده های آن شناسه خاص با استفاده از روش GET به داده های خاصی دسترسی پیدا کنیم. در اینجا، ما به شی شماره id 2 دسترسی خواهیم داشت. هنگامی که برگردانده شد، میتوانیم روی آن عملیاتی مانند PUT انجام دهیم که میتواند اطلاعات شی را ویرایش کند یا DELETE که اطلاعات شی را حتی در پایگاه داده حذف میکند.
نتیجه گیری
این مقاله اساساً به ما یاد داده است که Rest API چیست و چگونه میتوانیم از چارچوب جنگو برای ایجاد یک Rest API با پیادهسازی ابزارهای فریمورک مانند model، the ModelSerializer
و و استفاده کنیم ModelViewSet
.
اکنون می توانید ادامه دهید و بیشتر تمرین کنید و با استفاده از این راهنمای گام به گام، Rest API خود را ایجاد کنید.