Para rest_framework, o componente csrf que acompanha o django não entra em vigor

Existe um django.middleware.csrf.CsrfViewMiddlewaremiddleware no Django que fornece verificação global de csrf. Seu princípio é <form>gerar um rótulo oculto no <input>rótulo, enviá-lo oculto ao enviar o formulário <input>e o servidor verifica se esse campo está correto.

As etapas oficiais da operação csrf são:

  1. Em MIDDLEWARE_CLASSESadição django.middleware.csrf.CsrfViewMiddleware, a proteção csrf global aberta.
  2. Para o formulário do POST na estação <form>, adicione uma {% csrf_token %}marca de modelo à marca no modelo.
  3. Certifique-se de usar o django.template.context_processors.csrfprocessador de contexto na função de exibição correspondente . Existem duas maneiras de obter:
    (1) Use RequestContextou use diretamente a visão comum, elas serão automaticamente csrf_tokenadicionadas ao contexto do modelo.
    retorne render_to_response ("xxx.html", context_instance = RequestContext (request))
    (2). Importe e use manualmente o processador para gerar o token CSRF e adicioná-lo ao contexto do modelo. Por exemplo:
    from django.shortcuts import render_to_response
    de django.template.context_processors import csrf
    def my_view (request):
    c = {}
    c.update (csrf (request))
    # ... veja o código aqui
    retorne render_to_response ("a_template.html" c)

No entanto, a importação manual é complicada e dificulta a manutenção do código, e RequestContextnão é bom de usar , e a documentação do Django 1.8 afirma que context_instanceserá descartada após o 1.8.
Como devemos lidar com csrf_tokenisso? De fato, o Django fornece uma função de atalho para lidar com esse problema. Um exemplo de
django.shortcuts.renderconfiguração do context_instancepadrão internamente RequestContext. A chamada renderpode ser csrf_tokenadicionada automaticamente ao contexto.


Existem alguns blogs na Internet que podem ser settingsconfigurados para TEMPLATE_CONTEXT_PROCESSORSobter um csrf_tokenpreenchimento global para o contexto.
Mas, depois do meu experimento, descobri que não é fácil de usar: se um amigo souber o motivo, também gostaria de informá-lo.

Eu settingsconfigurei assim:

TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (    
    'django.core.context_processors.csrf',
)


----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
自此了解到要想django自带的csrf组件生效,要满足以上三个条件
  1. Em MIDDLEWARE_CLASSESadição django.middleware.csrf.CsrfViewMiddleware, a proteção csrf global aberta.
  2. Para o formulário do POST na estação <form>, adicione uma {% csrf_token %}marca de modelo à marca no modelo.
  3. Renderizar vista com função de renderização
  4. A estrutura restante da estrutura é um projeto que separa o front end e o back- end.O resultado retornado é retornado pelo Response, para que o componente csrf que acompanha o django não tenha efeito , portanto o componente de autenticação da estrutura restante é usado para autenticação de token. Por que a estrutura restante solicita que o ciclo de vida passe pelo middleware django e também pelo componente csrf do django? Por que precisamos escrever os componentes de autenticação, por que não usar o django?

Acho que você gosta

Origin www.cnblogs.com/python001-vip/p/12676333.html
Recomendado
Clasificación