# Dokumentasi Django 6.0.7

# Tampilan dasar

Tiga Kelas-kelas berikut menyediakan lebih banyak kegunaan dibutuhkan untuk membuat tampilan Django. Anda mungkin berpikir dari mereka sebagai tampilan induk, yang dapat digunakan mereka sendiri atau diwarisi dari. Mereka mungkin tidak menyediakan semua kemampuan diwajibkan oleh proyek, dalam hal ini ada tampilan Mixin dan Generic berdasarkan-kelas.

Banyak tampilan berdasarkan-kelas siap-pakai Django dari tampilan berdasarkan-kelas lain atau beragam mixin. Karena rantai pewarisan ini sangat penting, kelas-kelas leluhur didokumentasikan dibawah judul dari Ancestors (MRO). MRO adalah sebuah singkatan untuk Method Resolution Order.

## `View`

class django.views.generic.base.View

  The base view class. All other class-based views inherit from this base class. It isn't strictly a generic view and thus can also be imported from `django.views`.

  Metode Diagram alir

  1. `setup()`

  2. `dispatch()`

  3. `http_method_not_allowed()`

  4. `options()`

  Contoh views.py:

      from django.http import HttpResponse
      from django.views import View

      class MyView(View):
          def get(self, request, *args, **kwargs):
              return HttpResponse("Hello, World!")

  Contoh urls.py:

      from django.urls import path

      from myapp.views import MyView

      urlpatterns = [
          path("mine/", MyView.as_view(), name="my-view"),
      ]

  Atribut

  http_method_names

    Daftar dari nama-nama metode HTTP yang tampilan ini akan diterima.

    Awal:

        ["get", "post", "put", "patch", "delete", "head", "options", "trace"]

  Cara

  classmethod as_view(**initkwargs)

    Mengembalikan sebuah tampilan callable yang mengambil permintaan dan mengembalikan tanggapan:

        response = MyView.as_view()(request)

    Tampilan kembalian mempunyai atribut `view_class` dan `view_initkwargs`.

    Ketika tampilan dipanggil selama suklus permintaan/tanggapan , metode `setup()` menugaskan `HttpRequest` ke atribut `request` tampilan, dan penempatan apapun dan/atau argumen katakunci captured from the URL pattern ke atribut `args` dan `kwargs`, masing-masing. Kemudian `dispatch()` dipanggil.

    If a `View` subclass defines asynchronous (`async def`) method handlers, `as_view()` will mark the returned callable as a coroutine function. An `ImproperlyConfigured` exception will be raised if both asynchronous (`async def`) and synchronous (`def`) handlers are defined on a single view-class.

  setup(request, *args, **kwargs)

    Performs key view initialization prior to `dispatch()`.

    Assigns the `HttpRequest` to the view's `request` attribute, and any positional and/or keyword arguments captured from the URL pattern to the `args` and `kwargs` attributes, respectively.

    If overriding this method, you must call `super()`.

  dispatch(request, *args, **kwargs)

    The `view` part of the view -- the method that accepts a `request` argument plus arguments, and returns an HTTP response.

    Penerapan awalan akan memeriksa metode HTTP dan berusaha untuk menugaskan pada sebuah metode yang cocok dengan metode HTTP; sebuah `GET` akan ditugaskan ke `get()`, sebuah `POST` ke `post()`, dan sebagainya.

    Berdasarkan awalan. permintaan `HEAD` akan ditugaskan pada `get()`. Jika anda butuh menangani permintaan `HEAD` di cara berbeda daripada `GET`, anda dapat menimpa metode `head()`. Lihat mendukung cara HTTP lain untuk contoh.

  http_method_not_allowed(request, *args, **kwargs)

    If the view was called with an HTTP method it doesn't support, this method is called instead.

    The default implementation returns `HttpResponseNotAllowed` with the list of allowed methods in the `Allow` header, as required by RFC 7231. The response body is empty.

  options(request, *args, **kwargs)

    Menangani tanggapan pada permintaan untuk verb OPTIONS HTTP. Mengembalikan sebuah tanggapan dengan kepala `Allow` mengandung sebuah daftar dari tampilan diizinkan nama-nama metode HTTP.

    If the other HTTP methods handlers on the class are asynchronous (`async def`) then the response will be wrapped in a coroutine function for use with `await`.

## `TemplateView`

class django.views.generic.base.TemplateView

  Membangun cetakan yang diberikan, dengan konteks mengandung parameter ditangkap di URL.

  Ancestors (MRO)

  Tampilan ini mewarisi metode dan atribut dari tampilan berikut:

  - `django.views.generic.base.TemplateResponseMixin`

  - `django.views.generic.base.ContextMixin`

  - `django.views.generic.base.View`

  Metode Diagram alir

  1. `setup()`

  2. `dispatch()`

  3. `http_method_not_allowed()`

  4. `get_context_data()`

  Contoh views.py:

      from django.views.generic.base import TemplateView

      from articles.models import Article

      class HomePageView(TemplateView):
          template_name = "home.html"

          def get_context_data(self, **kwargs):
              context = super().get_context_data(**kwargs)
              context["latest_articles"] = Article.objects.all()[:5]
              return context

  Contoh urls.py:

      from django.urls import path

      from myapp.views import HomePageView

      urlpatterns = [
          path("", HomePageView.as_view(), name="home"),
      ]

  Konteks

  - Dikumpulkan (melalui `ContextMixin`) dengan argumen kata kunci ditangkap dari corak URL yang melayani tampilan.

  - Anda dapat juga menambahkan konteks menggunakan argumen katakunci `extra_context` untuk `as_view()`.

## `RedirectView`

class django.views.generic.base.RedirectView

  Pengalihan ke URL yang diberikan.

  URL yang diberikan mungkin memberikan pembentukan string gaya-kamus, yang akan disisipkan terhadap parameter ditangkap di URL. Karena penyisipan kata kunci adalah selalu selesai (bahkan jika tidak ada argumen dilewatkan), setiap karakter `"%"` di URL harus ditulis sebagai `"%%"` sehingga Python akan merubah mereka ke tanda persen tunggal pada keluaran.

  Jika URL diberikan adalah `None`, Django akan mengembalikan sebuah `HttpResponseGone` (410).

  Ancestors (MRO)

  Tampilan ini mewarisi metode dan atribut dari tampilan-tampilan berikut:

  - `django.views.generic.base.View`

  Metode Diagram alir

  1. `setup()`

  2. `dispatch()`

  3. `http_method_not_allowed()`

  4. `get_redirect_url()`

  Contoh views.py:

      from django.shortcuts import get_object_or_404
      from django.views.generic.base import RedirectView

      from articles.models import Article

      class ArticleCounterRedirectView(RedirectView):
          permanent = False
          query_string = True
          pattern_name = "article-detail"

          def get_redirect_url(self, *args, **kwargs):
              article = get_object_or_404(Article, pk=kwargs["pk"])
              article.update_counter()
              return super().get_redirect_url(*args, **kwargs)

  Contoh urls.py:

      from django.urls import path
      from django.views.generic.base import RedirectView

      from article.views import ArticleCounterRedirectView, ArticleDetailView

      urlpatterns = [
          path(
              "counter/<int:pk>/",
              ArticleCounterRedirectView.as_view(),
              name="article-counter",
          ),
          path("details/<int:pk>/", ArticleDetailView.as_view(), name="article-detail"),
          path(
              "go-to-django/",
              RedirectView.as_view(url="https://www.djangoproject.com/"),
              name="go-to-django",
          ),
      ]

  Atribut

  url

    URL untuk dialihkan, sebagai deretan kalimat. Atau `None` untuk memunculkan kesalahan HTTP 410 (Pergi).

  pattern_name

    Nama dari corak URL untuk dialihkan. Membalikkan akan selesai menggunakan args dan kwargs sama dilewatkan untuk tampilan ini.

  permanent

    Apakah pengalihan harus tetap. Satu-satunya perbedaan disini adalah kode status HTTP dikembalikan. Jika `True`, kemudian pengalihan akan menggunakan kode status 301. Jika `False`, kemudian pengalihan akan menggunakan kode status 302. Secara awalan, `permanent` adalah `False`.

  query_string

    Apakah dilewatkan bersama string permintaan GET ke tempat baru. Jika `True`, kemudian string permintaan ditambahkan ke URL. Jika `False`, kemudian string permintaan dibuang. Secara awalan, `query_string` adalah `False`.

  preserve_request
    New in Django 6.1.

    Whether to preserve the HTTP method and body during the redirect. If `True`, then the redirect will use status code 307 instead of 302, or 308 instead of 301 when `permanent` is `True`. By default, `preserve_request` is `False`.

  Cara

  get_redirect_url(*args, **kwargs)

    Membangun URL sasaran untuk pengalihan.

    The `args` and `kwargs` arguments are positional and/or keyword arguments captured from the URL pattern, respectively.

    Penerapan awal menggunakan `url` sebagai deretan karakter permulaan dan melakukan perluasan dari `%` parameter dinamai di deretan karakter itu menggunakan kelompok dinamai diambil di URL.

    Jika `url` tidak disetel, `get_redirect_url()` mencoba membalikkan `pattern_name` menggunakan apa yang telah ditangkap di URL (kedua kelompok bernama dan tidak bernama digunakan).

    Jika diminta oleh `query_string`, itu akan juga menambahkan string permintaan ke URL yang dibangkitkan. Subkelas-subkelas mungkin menerapkan perilaku apapun mereka inginkan, selama metode mengambalikan string URL siap-pengalihan.