Представление main.views.home не вернуло объект HttpResponse. Вместо этого оно вернуло None

Итак, я просмотрел несколько различных постов в slack об этой ValueError, но, похоже, большинство из них было связано с тем, чтобы не возвращать render, что, похоже, я делаю правильно...?

Я уверен, что это связано с моими операторами if, просто не уверен, что именно или как правильно настроить код, чтобы я мог проверить запрос формы к браузеру.

views.py:

from http.client import responses
from django.shortcuts import render
from .forms import SearchUser
from .search import search


def home(request):
    if request.method == "POST":
        form = SearchUser(request.POST)
        if form.is_valid():
            form.cleaned_data["name"]
        else:
            return render(request, "main/home.html", {
                'form': SearchUser(),  # Reference to form
                'userid': search(request),
                # 'mmr':NA,
            })

search.py:

import requests


def search(request):
    data = requests.get(
        f"https://americas.api.riotgames.com/riot/account/v1/accounts/by-riot-id/{name}/NA1?api_key=RGAPI-d1224a2c-9130-45ff-8c05-0656d56d105f")
    return data.json()['puuid']

urls.py:

from django.urls import path
from . import views


urlpatterns = [
    path("", views.home, name=""),
    #path("", views.search, 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 %}

Обычно представление должно возвращать один HttpResponse, вне зависимости от условий.

Попробуйте посмотреть ниже:

def home(request):
    user_id = ''
    form = ''
    if request.method == "POST":
        form = SearchUser(request.POST)
        print('form is coming')
        # form.cleaned_data["name"]
        return HttpResponse('<h2> form submitted.</h2>') #just for testing purpose you can remove it.
    else:
        form = SearchUser()
        user_id = search(request)
    return render(request, "main/home.html", {
        'form': form,  # Reference to form
        'userid': user_id,
        # 'mmr':NA,
    })

Получите name через POST-запрос.

def search(request):
    name=request.POST.get('name')
    data = requests.get(
        f"https://americas.api.riotgames.com/riot/account/v1/accounts/by-riot-id/{name}/NA1?api_key=RGAPI-d1224a2c-9130-45ff-8c05-0656d56d105f")
    return data.json()['puuid']

Note: После успешной работы с POST-данными вы всегда должны возвращать HttpResponseRedirect. Этот совет не относится к Django; это хорошая практика веб-разработки в целом.

.

Так,

from django.shortcuts import redirect
def home(request):
    user_id = ''
    form = ''
    if request.method == "POST":
        form = SearchUser(request.POST)
        print('form is coming')
        # form.cleaned_data["name"]   
        return redirect('some_path_name')  #Redirection is a good practice.   
    else:
         ...
         ...
Вернуться на верх