É possível usar uma API Rest Django pelo navegador?

86 views
Skip to first unread message

Fabio da Silva Pedro

unread,
Nov 28, 2019, 2:09:34 PM11/28/19
to Django Brasil
Boa tarde!

Pode parecer piada o que vou escrever lá no final, mas não é!, é dúvida mesmo por desconhecimento.

Estou quase terminando um curso de Django REST Framework, já montei o trabalho, foi feito deploy no Heroku e etc...

Só que durante o curso foi utilizado o Postman para fazer acesso a API, via utilização de token

Por mais que eu tenha procurado no Google, NÃO  achei uma forma de passar pelo navegador o token via header para acessar a API.

o link da aplicação é este: https://fsp-pontos-turisticos.herokuapp.com/

Pelo postman basta eu passar a url via get: https://fsp-pontos-turisticos.herokuapp.com/pontoturistico/ passar uma chave no headers(Authorization) e o valor (Token 000...)

que tenho acesso aos dados.

Mas tem como fazer este mesmo processo usando apenas o navegador(Chrome) e passando os dados na barra de endereços? Qual é o procedimento?



Andrew Pereira

unread,
Nov 28, 2019, 2:30:48 PM11/28/19
to django...@googlegroups.com

Utilize o NodeJs, com angular, vai te ajudar muito.

 

Se quiser fazer direto no navegador, utilize o javascript puro

 

Ex:

 

function Get(yourUrl){

  var Httpreq = new XMLHttpRequest(); // a new request

  Httpreq.open("GET",yourUrl,false);

  Httpreq.send(null);

  return Httpreq.responseText;         

}

var json_obj = JSON.parse(Get("http://192.168.1.4:3000"));

console.log("this is the author name: "+json_obj.title);

--
Você recebeu essa mensagem porque está inscrito no grupo "Django Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para django-brasi...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/django-brasil/d7252a00-0cbe-46b6-8bc7-f1996731d5af%40googlegroups.com.

Fabio da Silva Pedro

unread,
Nov 28, 2019, 3:45:40 PM11/28/19
to django...@googlegroups.com
Boa tarde e obrigado Andrew Pereira!

Sim, eu até fiz um teste usando o próprio Django, para realizar uma request e retornar a Api, mas neste caso eu já estaria mesmo fazendo a interligação entre interfaces, no caso a finalidade do REST.

Mas eu queria saber se seria possível fazer apenas usando a barra de endereços do navegador.
Pelo console do navegador ainda não tive essa expertise, mas voi usar agora, valeu a dica!

Eu não expliquei anteriormente isso, mas finalidade de fazer via navegador, é poder demonstrar para alguns colegas como é que fica o conteúdo da Api REST, e eles poderem navegar por ela logo que eu passe a eles um token de visitante, mas do jeito como está eles não conseguem navegar pelas URI sem que estejam autenticados pelo token, e a maneira de fazer isso seria eu mandar eles baixarem o Postman e usar a chave e o token e ter que explicar como usar....eu queria passar uma forma direta de navegação pelas URI passando o token via navegador somente.

Como não tem nada de importante e é só um trabalho de curso, eu poderia simplesmente desligar a autenticação pelo token, que a navegação pelas URI se dariam direto mas o meu objetivo não é esse.

Se realmente não tiver como fazer isso pela barra de endereços do navegador, o que farei é dar apenas autorização de leitura, então o CRUD do REST não poderá fazer nada.



--
Fábio S. Pedro 
(21) 97569-7573(WhatsApp).

Gledson Cruz

unread,
Nov 28, 2019, 5:08:08 PM11/28/19
to Django Brasil
Você pode tirar a autenticação para get, assim não vai precisar passar token, só colocar a URL no seu navegador

Gledson Cruz

unread,
Nov 28, 2019, 5:09:14 PM11/28/19
to Django Brasil
Desculpe, agora que li direito que esse não era seu objetivo 😔

Fabio da Silva Pedro

unread,
Nov 28, 2019, 6:04:32 PM11/28/19
to django...@googlegroups.com
Obrigado Gledson Cruz!

Eu ainda tô aprendendo, pode até ser que eu já tenha feito isso em algum momento, mas no momento, não me lembro como faço isso para o GET apenas, a minha solução foi a seguinte(e talvez a mais feia, mas me puxe a orelha se eu tiver feito besteira, por favor).

Seguindo a documentação do REST fui no settings do projeto e adicionei(eu não usava isso no settings, coloquei agora):
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
]
}
Depois fui em um dos meus viewsets e coloquei assim:
class PontoTuristicoViewSet(ModelViewSet):
serializer_class = PontoTuristicoSerializer

permission_classes = (DjangoModelPermissions,)
Agora, quando acesso uma URI, me abre uma caixa de diálogo pedindo o usuário(visitante) e a senha que foi cadastrada para ele no Django.
Uma vez que ele foi autenticado, as permissões que dei no Django para esse usuário(só leitura) são aplicadas e uma sessão passa a existir enquanto o navegador está aberto, não sendo necessário repetir o login nas outras URI's, ou seja, o usuário visitante, passou a ler todas as URI's

Como para todo novato tudo é estranho quando dá certo de cara, eu afirmo que não sei dizer se o que fiz é correto, só sei que não é a melhor forma, pois antes eu utilizava outra forma de autenticação/autorização, que é a seguinte:

Para cada viewsets de cada um dos meus endpoint's, eu fazia isso, importava o TokenAuthentication e DjangoModelPermissions:
from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import DjangoModelPermissions
from rest_framework.viewsets import ModelViewSet
from core.models import PontoTuristico
from .serializers import PontoTuristicoSerializer

class PontoTuristicoViewSet(ModelViewSet):
serializer_class = PontoTuristicoSerializer

#Autorização de acesso e autenticação por token
authentication_classes = (TokenAuthentication,)
permission_classes = (DjangoModelPermissions,)
Usar assim é opcional, pois cada endpoint, não necessáriamente precisa desse tipo de autenticação, foi feito assim por causa do curso apenas.

Com isso eu só poderia operar usando os Tokens que foram gerados no meu admin e associados a cada usuário, e segundo o autor do curso isso é o mais seguro de ser feito e na página do REST isso é visto também como boa prática.

Tem outras formas de autenticação mais avançadas que eu não cheguei a estudar ainda e que só verei elas no próximo módulo do curso.

Mas por favor peço a todos que se eu tiver feito algo errado, me avisem e me ajudem, sou novo nisso(tem 2 semanas de estudo) e estou aprendendo ainda.

Sinval Júnior

unread,
Nov 28, 2019, 8:59:37 PM11/28/19
to django...@googlegroups.com
Você está se referindo em produção? Ou algo para teste? Em produção precisa usar um Javascript, Atualmente os mais usados são:
- Reactjs;
- Vuejs;
- Angular;
Quanto a autenticação, o Django rest possui diversar formas [1]. Atualmente o JWT vem sendo bastente aceito e bem seguro, existe este app[2] para django rest


2 - https://jpadilla.github.io/django-rest-framework-jwt/
Ao encaminhar esta mensagem, por favor:
1 - Apague meu endereço eletrônico;
2 - Encaminhe como Cópia Oculta (Cco ou BCc) aos seus destinatários. Dificulte assim a disseminação de vírus, spams e banners.

#=================================================================+
#!/usr/bin/env python
nome = 'Sinval Júnior'
email = 'sinvalju arroba gmail ponto com'
print nome
print email
#==================================================================+


Fabio da Silva Pedro

unread,
Nov 29, 2019, 7:23:16 AM11/29/19
to django...@googlegroups.com
Bom dia Sinval Júnior.
Obrigado pela dica do JWT, vou ler a documentação.

Então, isso é um app que fiz de acordo com um curso de REST que comecei ha 2 semanas, portanto não é em produção, mas sim está "deployado" no Heroku

Como ainda estou em fase de aprendizagem, as dúvidas são muitas, e é igual a andar de bicicleta com rodinhas e depois precisar tirar elas e aprender a andar sozinho se equilibrando, então como eu expliquei nos e-mails anteriores, tudo que lí e implementei durante o curso teve a supervisão do instrutor, mas agora tendo que fazer sozinho, bate a insegurança de estar fazendo algo errado e mesmo lendo a documentação fica sempre uma dúvida.

No meu caso era a autenticação por Token que eu queria saber se poderia realizar ela usando somente o navegador, pois eu queria demonstrar a outros colegas como a interface da API REST, depois de pronta, mas para isso eu teria que: ou criar um outro app para se ligar a API ou ensinar a usar o Postman para fazer a ligação com a API, eu queria algo simples, como no fim acabei implementando, uma tela de login e senha. Desativei a autenticação por Token e passei a adotar(para esse exercício somente) a autenticação pelas DjangoModelPermissions, assim matei dois coelhos numa só paulada, consegui fazer funcionar por alguma autenticação e demonstrar aos meu colegas a aplicação.

A outra questão que levantei é, se o que fiz(e descrevi nos emails anteriores), poderia ser considerado como também correto de se fazer, mas que ficasse entendido que não seria a melhor opção, pois sim existem melhores opções em questão de segurança de autenticação.

Mas valeu mesmo pela ajuda Sinval Júnior e agradeço também a todos os demais que tem me respondido com dicas, elas são ouro para quem está aprendendo.

Fabio da Silva Pedro

unread,
Nov 29, 2019, 5:53:41 PM11/29/19
to Django Brasil
Sem problemas, eu é que fico receoso de não estar sabendo explicar o meu problema corretamente ....kkkk
Reply all
Reply to author
Forward
0 new messages