Oiii Rangel, como você está? Espero que esteja tudo bem por ai ^-^
Sinto muito pela demora em obter um retorno.
Vou fazer passo a passo com você explicando o porquê de cada procedimento, tá bom? E se ficar alguma dúvida no meio do caminho, fique a vontade para perguntar =) Vamos lá:
- Como exemplo, vamos utilizar a API de CEPs, a
viacep
. A estrutura dessa API é a seguinte:
URL: https://viacep.com.br/ws/01001000/json/
Retorno da URL:
{
"cep": "01001-000",
"logradouro": "Praça da Sé",
"complemento": "lado ímpar",
"bairro": "Sé",
"localidade": "São Paulo",
"uf": "SP",
"ibge": "3550308",
"gia": "1004",
"ddd": "11",
"siafi": "7107"
}
O objetivo é preencher no formulário o número CEP e utilizar uma função python responsável por buscar os dados do CEP preenchido no formulário, onde iremos substituir na URL o cep enviado pelo formulário.
- Quanto ao código HTML desse formulário, estou utilizando o mesmo exemplo utilizado neste curso, do projeto de receitas, porém, com algumas adaptações:
{% extends 'base.html' %}
{% load static %}
{% block content %}
<div class="contact-area section-padding-0-80 mt-5">
<div class="container">
<div class="row">
<div class="col-12">
<div class="section-heading">
<h2>Requisição a API</h2>
</div>
</div>
</div>
<div class="row">
<div class="col-12">
<div class="contact-form-area">
<form action="{% url 'requisicao_api' %}" method="POST">
{% csrf_token %}
<div class="row">
<div class="col-12 col-lg-12">
<label for="cep"><b>CEP</b></label>
<input id="cep" type="text" class="form-control" name="cep" placeholder="Ex: 01001000" required>
</div>
<div class="col-12 text-center">
<button class="btn btn-success" type="submit">Buscar</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
Observe no código acima que no atributo action
do form
é redirecionado para a url de requisicao_api
. Vamos cadastrar essa url
no arquivo urls.py
:
from django.urls import path
from django.contrib.auth import views as auth_views
from . import views
urlpatterns = [
path('requisicao_api', views.requisicao_api, name='requisicao_api'),
... outras urls omitidas
]
De posse da url
cadastrada, vamos escrever nossa função responsável por retornar os dados da API de acordo com o cep
preenchido no formulário. Em nosso arquivo views.py
vamos criar essa função: requisicao_api
:
def requisicao_api(request):
if request.method == 'POST':
cep = request.POST['cep']
response = requests.get(f'https://viacep.com.br/ws/{cep}/json/')
if response.status_code == 200:
dados = response.json()
return render(request, 'cep.html', {"dados": dados})
return redirect('cadastro')
Na primeira linha verificamos se o método da requisição quando enviamos o formulário é do tipo POST, que nada mais é do que um método utilizado quando precisamos enviar algum dado. E logo após isso, pegamos o dado enviado, que no caso é o atributo name
do nosso formulário html, nesse caso, esse atributo possui o name
de cep
.
Agora que capturamos o dado que precisamos, basta passá-lo para a função responsável por fazer a requisição, que é a requests.get
. Em caso de sucesso (código 200), pegamos o formato json
desses dados e redirecionamos para uma página responsável por nos mostrar aqueles dados, a cep.html
. E caso o método não seja do tipo POST, iremos apenas permanecer na mesma página através do redirect
.
Continua...