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尝试下面的视图:
\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 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\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n
Note:成功处理 POST 数据后,您应该始终返回 HttpResponseRedirect。这个技巧不是\xe2\x80\x99t特定于Django的;一般来说,it\xe2\x80\x99 是很好的 Web 开发实践。
所以,
\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搜索.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
\nimport 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\'\nRun 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 %}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
5049 次 |
| 最近记录: |