“Views” de baseLink para este cabeçalho
As três classes seguintes fornecem a maioria das fincionalidades necessárias para criar “views” do Django. Você pode pensar nelas como “views” mães, as quais podem ser usadas elas mesmas ou serem herdadas. Elas talvez não forneçam todas as capacidades requeridas para projetos, para tais casos existem “Mixins” e “views” genéricas baseadas em classes.
Muitas das “views” baseadas em classes embutidas no Django herdam de outras “views” baseadas em classes ou vários “mixins. Por causa dessa cadeia de heranças é muito importante, que a classe ascendente seja documentada sob a seção título do Ancestors (MRO).MRO é um acronismo em inglês para Ordem de Resolução de Método.
ViewLink para este cabeçalho
- class django.views.generic.base.ViewLink para esta definição
A master “view” baseada em classe. Todas as outras “views” baseadas em classes herdam desta classe base.
Fluxograma de métodos
Examplo views.py:
from django.http import HttpResponse from django.views.generic import View class MyView(View): def get(self, request, *args, **kwargs): return HttpResponse('Hello, World!')Exemplo urls.py:
from django.conf.urls import url from myapp.views import MyView urlpatterns = [ url(r'^mine/$', MyView.as_view(), name='my-view'), ]Atributos
- http_method_namesLink para esta definição
A lista de nomes de métodos HTTP que esta “view” irá aceitar.
Padrão:
['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']
Métodos
- classmethod as_view(**initkwargs)Link para esta definição
Retorna uma “view” “chamável” que recebe um request e retorna uma resposta:
response = MyView.as_view()(request)A “view” retornada tem os atributos
view_classeview_initkwargs.
- dispatch(request, *args, **kwargs)Link para esta definição
A parte
viewda “view”– o método que aceita um argumentorequestmais outros argumentos, e retorna uma resposta HTTP.A implementação padrão irá introspectar o método HTTP e tentar delegar para um método que combine com o método HTTP; um
GETserá delegado paraget(), umPOST``para um ``post(), e assim por diante.Por padrão, uma requisição
HEADserá delegada paraget(). Se você precisa manipular requisiçõesHEADde uma maneira diferente de umGET, você pode sobrescrever o métodohead(). veja Supporting other HTTP methods para um exemplo.
- http_method_not_allowed(request, *args, **kwargs)Link para esta definição
Se a “view” é chamada com um método HTTP que ela não suport, então este método é chamado.
A implementação padrão retorna
HttpResponseNotAllowedcom uma lista de métodos permitidos in formato de texto simples.
- options(request, *args, **kwargs)Link para esta definição
Handles responding to requests for the OPTIONS HTTP verb. Returns a response with the
Allowheader containing a list of the view’s allowed HTTP method names.
TemplateViewLink para este cabeçalho
- class django.views.generic.base.TemplateViewLink para esta definição
Renderiza um dado template, com o contexto contendo parâmetros capturados na URL.
Ancestrais (MRO)
Essa “view” herda métodos e atributos das seguintes “views”:
Fluxograma de métodos
Examplo 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 contextExemplo urls.py:
from django.conf.urls import url from myapp.views import HomePageView urlpatterns = [ url(r'^$', HomePageView.as_view(), name='home'), ]Context
Populada (através do
ContextMixin) com os argumentos nomeados capturados do padrão formatado da URL que serve a “view”.
RedirectViewLink para este cabeçalho
- class django.views.generic.base.RedirectViewLink para esta definição
Redirecionamentos para uma URL específica.
A URL dada deve pode conter formatação de string no estilo de dicionario, o qual será interpolado com os parâmetros capturados na UTL. Porque a interpoalação de palavras-chave sempre são feitas (mesmo que nenhum argumento seja passado), qualquer caracter
"%"na URL deve ser escrita como"%%"então o Python irá converte-los para um único sinal de porcentagem na saída.Se a dada URL é
None, o Django irá retornar umHttpResponseGone(410).Ancestrais (MRO)
Essa “view” herda métodos e atributos da seguinte “view”:
Fluxograma de métodos
Examplo 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)Exemplo 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'), ]Atributos
- urlLink para esta definição
A URL para a qual será redirecionada, como string. Ou
Nonepara levantar um erro HTTP 410 (“Gone”).
- pattern_nameLink para esta definição
O nome do padrão formatado para URL para redirecionar. O reverso será feito usando o mesmo “args” e “kwargs” como foram passados para esta “view”.
- permanentLink para esta definição
Se o redirecionamento deve ser permanente ou não. A única diferença aqui é o código de estatus HTTP retornado. Se
True, então o redirecionamento usará código de estatus 301. SeFalse, o redirecionamento usará código de estatus 302. Por padrão,permanentéFalse.
- query_stringLink para esta definição
Se passa ou não no GET a “query string” para o novo local. Se
True, então a “query string” é adicionada à URL. SeFalse, entao a “query string” é descartada. Por padrão,query_stringéFalse.
Métodos
- get_redirect_url(*args, **kwargs)Link para esta definição
Constrói a URL alvo para redirecionamento.
A implementação padrão usa
urlcomo a string inicial e realiza a expansão dos parâmetros nomeados%na string usando os grupos nomeados capturados na URL.Se
urlnão está definido,get_redirect_url()tenta fazer o reverse depattern_nameusando o que foi capturado na URL (ambos os grupos, nomeados e não nomeados são usados).Se requisitado via
query_string, também será adicionado a “query string” a URL gerada. Subclasses podem implementar qualquer comportamento que quiser, contanto que o método retorne uma string URL de redirecionamento pronta.