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
¶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
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
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()
.
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.
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.
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
¶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
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
ContextMixin
) dengan argumen kata kunci ditangkap dari corak URL yang melayani tampilan.extra_context
untuk as_view()
.RedirectView
¶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:
Metode Diagram alir
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
.
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.
Mei 07, 2024