Запрос к API и отображение его результатов из введенной формы - Django
Я не уверен, правильно ли я поступаю, но я не получаю никаких ошибок, просто перезагружается страница, ничего не отображая.
Проблема может быть связана с тем, что я пытаюсь отформатировать строку api и ввести туда данные пользователя?
Я также попробовал вернуть переменную как HttpResponse, все равно ничего не изменилось.
Простите, я только возвращаюсь в python и только начинаю с Django.
Корректный код должен выглядеть примерно так:
1.Пользователь вводит свое имя в форму 2. На странице отображается usersid.
Код:
views.py:
from urllib import response
from django.shortcuts import render
from django.http import HttpResponse
import requests
from .forms import SearchUser
import json
# Create your views here.
def home(response):
# data = requests.get(
# 'https://americas.api.riotgames.com/riot/account/v1/accounts/by-riot-id/ReallyBlue/NA1?api_key=RGAPI')
# userid = data.json()['puuid']
return render(response, "main/home.html", {
'form': SearchUser(), # include reference to your form
'userid': search,
# 'mmr':NA,
})
def search(response):
if response.method == "POST":
form = SearchUser(response.POST)
if form.is_valid():
n = form.cleaned_data["name"]
user = n(name=n)
user.save()
data = requests.get(
"https://americas.api.riotgames.com/riot/account/v1/accounts/by-riot-id/f'{user}'/NA1?api_key=RGAPI")
userid = data.json()['puuid']
return HttpResponse(userid)
else:
form = SearchUser()
return render(response, "main/home.html", {"userid": userid})
forms.py:
from django import forms
class SearchUser(forms.Form):
name = forms.CharField(label="Name", max_length=200)
urls.py:
from django.urls import path
from . import views
urlpatterns = [
path("", views.home, name=""),
]
home.html:
{% extends 'main/base.html'%}
{% block content %}
<h2>Valorant Ranked Checker</h2>
<form method="post" action="">
{% csrf_token %}
{{form}}
<button type="submit" name="search">
Get rank
</button>
</form>
<p><strong>{{userid}} - {{mmr}}</strong></p>
{% endblock %}
base.html:
<!DOCTYPE html>
<head>
<title>Blue's Valorant Ranked Checker</title>
</head>
<body>
<div id="content" name="content">
{% block content %}
{% endblock %}
</div>
</body>
</html>
Итак, что вам нужно сделать, это использовать одно представление для url и затем выполнять запросы API внутри этого представления. Таким образом, что-то вроде:
urlpatterns = [
path("", views.search, name=""),
]
и затем внутри вашего представления вам нужно отправить form
с контекстным словарем, чтобы показать его в HTML.
def search(response):
if response.method == "POST":
form = SearchUser(response.POST)
if form.is_valid():
name = form.cleaned_data["name"]
data = requests.get(
f"https://americas.api.riotgames.com/riot/account/v1/accounts/by-riot-id/{user}/NA1?api_key=*******")
userid = data.json()['puuid']
return HttpResponse(userid) # Or preferably pass onto a different view
else:
return HttpResponse("Form is not properly filled")
else:
form = SearchUser()
return render(response, "main/home.html", {"form": form})