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.

Changed in Django 1.10:

Kemampuan untuk mengimpor django.views telah ditambahkan.

Metode Diagram alir

  1. dispatch()
  2. http_method_not_allowed()
  3. 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.conf.urls import url

from myapp.views import MyView

urlpatterns = [
    url(r'^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 siklus permintaan/tanggapan, HttpRequest diberikan ke tampilan atribut request. Penempatan apapun dan/atau argumen kata kunci captured from the URL pattern 1 diberikan ke atribut args dan kwargs, masing-masing. Kemudian dispatch() dipanggil.

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 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:

Metode Diagram alir

  1. dispatch()
  2. http_method_not_allowed()
  3. 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(HomePageView, self).get_context_data(**kwargs)
        context['latest_articles'] = Article.objects.all()[:5]
        return context

Contoh urls.py:

from django.conf.urls import url

from myapp.views import HomePageView

urlpatterns = [
    url(r'^$', HomePageView.as_view(), name='home'),
]

Konteks

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

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:

Metode Diagram alir

  1. dispatch()
  2. http_method_not_allowed()
  3. 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(ArticleCounterRedirectView, self).get_redirect_url(*args, **kwargs)

Contoh urls.py:

from django.conf.urls import url
from django.views.generic.base import RedirectView

from article.views import ArticleCounterRedirectView, ArticleDetail

urlpatterns = [
    url(r'^counter/(?P<pk>[0-9]+)/$', ArticleCounterRedirectView.as_view(), name='article-counter'),
    url(r'^details/(?P<pk>[0-9]+)/$', ArticleDetail.as_view(), name='article-detail'),
    url(r'^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.

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.