اطلاعیه شماره 26 : به اطلاع کلیه کاربران وبسایت پایتونی ها می رساند به علت تداخلات شدید و محدودیت ها موجود در اینترنت کشور سرور های پایتونی ها با اختلال رو به رو شده که همکاران واحد فنی در حال بررسی موضوع هستند تا هرچه سریعتر مشکل را مرتفع کنند، لطفا صبور باشید.

021-71053903 [email protected] پشتیبانی از شنبه تا چهارشنبه ساعت 9 الی 16

آموزش Rest Framework در جنگو

مقدمه

با سلام خدمت تمامی شما دانشپذیران خوب وبسایت پایتونی ها به دلیل استقبال بی نظیر شما از مقالات این وبسایت برآن شدیم تا با یک مقاله آموزشی در مورد 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 خود را ایجاد کنید.

محمدرضا حسنی

224 مطلب منتشر شده

دانش آموخته رشته فناوری اطلاعات / موسس پایتونی ها

درباره این مطلب نظر دهید !

مطالب پرمخاطب پایتونی ها

آموزش تست نویسی در جنگو

تست نویسی در جنگو

11
دقیـقه مطالعه
ادامه ...

محصولات فروش پایتونی ها

%69
تخفیف

آموزش برنامه نویسی پایتون

35,000 تومان
6
%60
تخفیف

آموزش فیگما (Figma)

30,000 تومان
3