视图 main.views.home 未返回 HttpResponse 对象。它返回 None 相反

Blu*_*lue 1 python django django-urls django-forms django-views

好吧,我浏览了一些关于这个 ValueError 的不同的松弛帖子,但似乎大多数都与不返回渲染有关,看起来我做得正确......?

我确信这与我的 if 语句有关,只是不确定到底是什么或如何正确设置代码,以便我可以检查对浏览器的表单请求。

编辑:根据评论,我暂时检查了 is_valid 只是为了看看是否会收到新的错误,而且似乎我收到了名称错误。“名称‘名称’未定义”

所以它无法将用户输入的表单获取到 api 中。

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)
        form.cleaned_data["name"]
    else:
            return render(request, "main/home.html", {
                'form': SearchUser(),  # Reference to form
                'userid': search(request),
                # 'mmr':NA,
            })
Run Code Online (Sandbox Code Playgroud)

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']
Run Code Online (Sandbox Code Playgroud)

urls.py:

from django.urls import path
from . import views


urlpatterns = [
    path("", views.home, name=""),
    #path("", views.search, name=""),
]
Run Code Online (Sandbox Code Playgroud)

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 %}
Run Code Online (Sandbox Code Playgroud)

forms.py:

from django import forms


class SearchUser(forms.Form):
    name = forms.CharField(label="Name", max_length=200)
Run Code Online (Sandbox Code Playgroud)

小智 5

通常,在条件之外,视图需要返回单个 HttpResponse。

\n

尝试下面的视图:

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

Note:成功处理 POST 数据后,您应该始终返回 HttpResponseRedirect。这个技巧不是\xe2\x80\x99t特定于Django的;一般来说,it\xe2\x80\x99 是很好的 Web 开发实践。

\n
\n

所以,

\n
\nfrom django.shortcuts import redirect\ndef home(request):\n user_id = \'\'\n form = \'\'\n if request.method == "POST":\n form = SearchUser(request. POST)\n print(\'form iscoming\')\n # form.cleaned_data["name"] \n         return redirect(\'some_path_name\')   #重定向是一个很好的做法。\n 否则:\n ...\n ...\n
\n

编辑:

\n

试试这个代码:

\n

搜索.py

\n
\nfrom django.shortcuts import redirect\ndef home(request):\n    user_id = \'\'\n    form = \'\'\n    if request.method == "POST":\n        form = SearchUser(request.POST)\n        print(\'form is coming\')\n        # form.cleaned_data["name"]   \n        return redirect(\'some_path_name\')  #Redirection is a good practice.   \n    else:\n         ...\n         ...\n
\n

首页.html

\n
import requests\n\ndef search(request):\n    name = request.POST.get(\'name\', \'novalue\')\n    if name != \'novalue\':\n        print(\'--------------------------------\')\n        print(name)\n        print(\'--------------------------------\')\n\n        data = requests.get(\n            f"https://americas.api.riotgames.com/riot/account/v1/accounts/by-riot-id/{name}/NA1?api_key=RGAPI-d801ef44-e952-43b0-9b08-92badc7da82c")\n        print(data.url)\n        try:\n\n            puuid = data.json()[\'puuid\']\n\n            if puuid:\n                print(\'-------------------this is ppuid-------------\')\n                print(puuid)\n                print(\'-------------------this is ppuid-------------\')\n                print(name, \'has come here, means 200\')\n                return puuid\n        except:\n            print(name, \'has come here, means not found or forbidden\')\n\n            return \'puuid not found\'\n
Run Code Online (Sandbox Code Playgroud)\n

视图.py

\n
{% extends \'main/base.html\'%}\n\n\n{% block content %}\n    <h2>Valorant Ranked Checker</h2>\n    <form method="POST" action="">\n        {% csrf_token %}\n        {{form}}\n        <button type="submit" name="search">\n            Get rank\n        </button>\n    </form>\n    {% if userid != "puuid not found" %}\n        <p><strong>ppuid found - {{userid}}</strong></p>\n    {% else %}\n        <p><strong>{{userid}}</strong></p>\n    {% endif %}\n{% endblock %}\n
Run Code Online (Sandbox Code Playgroud)\n