Como posso habilitar CORS no meu Django REST Framework? a referência não ajuda muito, diz que posso fazer por um middleware, mas como posso fazer isso?
python
django
cors
django-rest-framework
middleware
Julio Marins
fonte
fonte
Access-Control-Allow-Origin: *
razão , mas como a única necessidade de um CORS simples é um cabeçalho , não vejo por que carregar uma coisa inteira, vou colocar outra maneira de fazer isso em sua resposta para que ambos os métodos estejam disponíveis. referência: [link (] enable-cors.org/server.html )django-cors-headers
é muito mais flexível do que isso. Se preferir criar sua própria turma, fique à vontade. Mas eu estaria usando essa biblioteca.e adicione-o aos seus aplicativos instalados:
Você também precisará adicionar uma classe de middleware para ouvir as respostas:
mais detalhes: https://github.com/ottoyiu/django-cors-headers/#configuration
ler a documentação oficial pode resolver quase todos os problemas
fonte
CORS_ORIGIN_ALLOW_ALL = True
, masCORS_ORIGIN_WHITELIST
ainda está definido? Os documentos parecem fazer parecer que isso não é obrigatório e parece ser confuso para a resposta aqui.'corsheaders.middleware.CorsMiddleware',
precisa estar no topo da lista, caso contrário, a conexão pode ser rejeitada antes de chegar a ela.Você pode fazer isso usando um middleware personalizado, mesmo sabendo que a melhor opção é usar a abordagem testada do pacote
django-cors-headers
. Com isso dito, aqui está a solução:crie a seguinte estrutura e arquivos:
-
myapp/middleware/__init__.py
-
myapp/middleware/corsMiddleware.py
adicione à
settings.py
linha marcada:fonte
from . import corsMiddleware
Caso alguém esteja voltando a esta questão e decidindo escrever seu próprio middleware, este é um exemplo de código para o novo estilo de middleware do Django -
fonte
Para versões do Django> 1.10, de acordo com a documentação , um MIDDLEWARE personalizado pode ser escrito como uma função, digamos no arquivo:
yourproject/middleware.py
(como irmão desettings.py
):e, finalmente, adicione o caminho python desta função (escrito a raiz do seu projeto) para a lista MIDDLEWARE em seu projeto
settings.py
:Mole-mole!
fonte
open_access_middleware
.Bem, eu não conheço caras, mas:
usando aqui python 3.6 e django 2.2
Renomear MIDDLEWARE_CLASSES para MIDDLEWARE em settings.py funcionou.
fonte
Abaixo estão as etapas de trabalho sem a necessidade de nenhum módulo externo:
Etapa 1: crie um módulo em seu aplicativo.
Por exemplo, vamos supor que temos um aplicativo chamado user_registration_app . Explore user_registration_app e crie um novo arquivo.
Vamos chamar isso de custom_cors_middleware.py
Cole a definição de classe abaixo:
Etapa 2: registrar um middleware
No arquivo settings.py do seu projeto, adicione esta linha
'user_registration_app.custom_cors_middleware.CustomCorsMiddleware'
Por exemplo:
Lembre-se de substituir user_registration_app pelo nome de seu aplicativo onde você criou seu módulo custom_cors_middleware.py.
Agora você pode verificar se ele adicionará os cabeçalhos de resposta necessários a todas as visualizações no projeto!
fonte
Seguir a instrução oficial não funciona
Finalmente, use a maneira antiga de descobrir.
ADICIONAR:
fonte