← Back to Django Course | Chapter 14: REST API with DRF | Lesson 5 of 6

ViewSets और Routers

एक ViewSet list, create, update, और delete को एक class में bundle करता है, और एक router इसके सारे URLs अपने आप wire up करता है।
Syntax
markup
class ModelNameViewSet(viewsets.ModelViewSet):
    queryset = ModelName.objects.all()
    serializer_class = ModelNameSerializer

router = DefaultRouter()
router.register('route', ModelNameViewSet)
urlpatterns = router.urls

एक ModelViewSet बनाना

ModelViewSet एक model के लिए objects list, retrieve, create, update, और delete करने की logic combine करता है, इसके queryset और serializer_class उपयोग करते हुए।

उदाहरण: Creating a ModelViewSet

ModelViewSet combines the logic of listing, retrieving, creating, updating, and deleting objects for a model, using its queryset and serializer_class.

markup
from rest_framework import viewsets
from .models import Book
from .serializers import BookSerializer

class BookViewSet(viewsets.ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer
{# Django-only code -- models.py/views.py/urls.py/settings.py snippets, or template markup using Django template tags/variables -- can't run standalone via Judge0 or the browser preview, since it needs a real Django project. Only this course's pure-Python examples (example_lang == 'python', no Django imports) are actually runnable, so those still get the button below. #}

एक Router के साथ Register करना

DefaultRouter ViewSet को inspect करता है और सारे standard URL patterns (list, detail, create, update, delete) अपने आप generate करता है।

उदाहरण: Registering with a Router

DefaultRouter inspects the ViewSet and generates all the standard URL patterns (list, detail, create, update, delete) automatically.

markup
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import BookViewSet

router = DefaultRouter()
router.register('books', BookViewSet, basename='book')

urlpatterns = [
    path('api/', include(router.urls)),
]
{# Django-only code -- models.py/views.py/urls.py/settings.py snippets, or template markup using Django template tags/variables -- can't run standalone via Judge0 or the browser preview, since it needs a real Django project. Only this course's pure-Python examples (example_lang == 'python', no Django imports) are actually runnable, so those still get the button below. #}

कौन से URLs Generate होते हैं

BookViewSet को books के under register करना बिना हाथ से एक भी path() लिखे RESTful endpoints का एक पूरा set produce करता है।

उदाहरण: What URLs Get Generated

Registering BookViewSet under books produces a full set of RESTful endpoints without writing a single path() manually.

bash
GET    /api/books/       -> list all books
POST   /api/books/       -> create a book
GET    /api/books/1/     -> retrieve book with id 1
PUT    /api/books/1/     -> update book with id 1
DELETE /api/books/1/     -> delete book with id 1

⚠️ Run this in your own terminal or Node.js environment.

Related Topics
{# common_mistakes/chapter_summary/browser_support: on Hindi pages the view already swaps in the hi_ translation fields (or blanks these out if untranslated), so this renders correctly for both languages without a lang_code check here. #}
आम गलतियां
  1. एक ModelViewSet के लिए इसे एक router के साथ register करने के बजाय हाथ से separate URL patterns लिखना, वह काम duplicate करते हुए जो router पहले से करता है।
  2. ViewSet को View के साथ confuse करना — एक ViewSet सीधे एक URL से map नहीं होता, यह एक router द्वारा generated related URLs के एक set से map होता है।
  3. Router के generated urls (router.urls) को project की URL configuration में include करना भूल जाना।
चैप्टर सारांश
  • ModelViewSet एक single class से list, retrieve, create, update, और destroy actions provide करता है।
  • DefaultRouter एक registered ViewSet के लिए URL patterns अपने आप generate करता है, एक browsable API root सहित।
  • एक ViewSet को router के साथ register करना हर URL pattern हाथ से लिखने की जगह लेता है।
🔒

Chapter Quiz — Complete all 6 topics to unlock

0/6 topics done

Complete these topics first:

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.