---
title: "Tampilan dasar"
version: 3.1
locale: id
source: https://docs.djangoproject.com/id/3.1/ref/class-based-views/base/
canonical: https://djangodocs.dev/id/3.1/ref/class-based-views/base/
---
# 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`

Tampilan dasar berdasarkan-kelas master. Semua tampilan berdasarkan-kelas lainnya mewarisi dari kelas dasar. Itu tidak mengetatkan tampilan umum dan demikian juga dapat diimpor dari `django.views`.

**Metode Diagram alir**

1. [`setup()`](#django.views.generic.base.View.setup)
2. [`dispatch()`](#django.views.generic.base.View.dispatch)
3. [`http_method_not_allowed()`](#django.views.generic.base.View.http_method_not_allowed)
4. [`options()`](#django.views.generic.base.View.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()`](#django.views.generic.base.View.setup) menugaskan [`HttpRequest`](/id/3.1/ref/request-response/#django.http.HttpRequest) ke atribut `request` tampilan, dan penempatan apapun dan/atau argumen katakunci [captured from the URL pattern](/id/3.1/topics/http/urls/#how-django-processes-a-request) ke atribut `args` dan `kwargs`, masing-masing. Kemudian [`dispatch()`](#django.views.generic.base.View.dispatch) dipanggil.

#### `setup(request, *args, **kwargs)`

Performs key view initialization prior to [`dispatch()`](#django.views.generic.base.View.dispatch).

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

#### `dispatch(request, *args, **kwargs)`

BAgian `view` dari tampilan -- metode yang menerima sebuah argumen `request` ditambah argumen dan mengembalikan sebuah tanggapan HTTP.

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](/id/3.1/topics/class-based-views/#supporting-other-http-methods) untuk contoh.

#### `http_method_not_allowed(request, *args, **kwargs)`

Jika tampilan dipanggil dengan sebuah metode HTTP yang itu tidak mendukung, metode ini dipanggil sebagai gantinya.

Penerapan awalan mengembalikan `HttpResponseNotAllowed` dengan sebuah daftar dari metode yang diizinkan dalam teks polos.

#### `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.

## `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`](/id/3.1/ref/class-based-views/mixins-simple/#django.views.generic.base.TemplateResponseMixin)
- [`django.views.generic.base.ContextMixin`](/id/3.1/ref/class-based-views/mixins-simple/#django.views.generic.base.ContextMixin)
- [`django.views.generic.base.View`](#django.views.generic.base.View)

**Metode Diagram alir**

1. [`setup()`](#django.views.generic.base.View.setup)
2. [`dispatch()`](#django.views.generic.base.View.dispatch)
3. [`http_method_not_allowed()`](#django.views.generic.base.View.http_method_not_allowed)
4. [`get_context_data()`](/id/3.1/ref/class-based-views/mixins-simple/#django.views.generic.base.ContextMixin.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`](/id/3.1/ref/class-based-views/mixins-simple/#django.views.generic.base.ContextMixin)) dengan argumen kata kunci ditangkap dari corak URL yang melayani tampilan.
- Anda dapat juga menambahkan konteks menggunakan argumen katakunci [`extra_context`](/id/3.1/ref/class-based-views/mixins-simple/#django.views.generic.base.ContextMixin.extra_context) untuk [`as_view()`](#django.views.generic.base.View.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`](#django.views.generic.base.View)

**Metode Diagram alir**

1. [`setup()`](#django.views.generic.base.View.setup)
2. [`dispatch()`](#django.views.generic.base.View.dispatch)
3. [`http_method_not_allowed()`](#django.views.generic.base.View.http_method_not_allowed)
4. [`get_redirect_url()`](#django.views.generic.base.RedirectView.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, ArticleDetail

urlpatterns = [
    path('counter/<int:pk>/', ArticleCounterRedirectView.as_view(), name='article-counter'),
    path('details/<int:pk>/', ArticleDetail.as_view(), name='article-detail'),
    path('go-to-django/', RedirectView.as_view(url='https://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`.

**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](/id/3.1/topics/http/urls/#how-django-processes-a-request), respectively.

Penerapan awal menggunakan [`url`](#django.views.generic.base.RedirectView.url) sebagai deretan karakter permulaan dan melakukan perluasan dari `%` parameter dinamai di deretan karakter itu menggunakan kelompok dinamai diambil di URL.

Jika [`url`](#django.views.generic.base.RedirectView.url) tidak disetel, `get_redirect_url()` mencoba membalikkan [`pattern_name`](#django.views.generic.base.RedirectView.pattern_name) menggunakan apa yang telah ditangkap di URL (kedua kelompok bernama dan tidak bernama digunakan).

Jika diminta oleh [`query_string`](#django.views.generic.base.RedirectView.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.
