Flask request.form.get() returning TypeError/NoneType



HTML代码:

<DOCTYPE HTML>
<head>
<meta charset="utf-8">
<title>Astrotools - Planetary Hours Calculator</title>
</head>
<body>
<h1>Astrotools</h1>
<ul>
<li><a href = '#'>Planetary Hours Calculator</a></li>
<li><a href = #>Tarot Astrology Reference</a></li>
<li><a href = #>Graphic Declination Ephemeris (Coming Soon)</a></li>
</ul>
<h2>Planetary Hours Calculator</h2>
<div>
<form action="planetaryhours" method="POST">
<label for="city">City:</label><br>
<input type="text" id ="city" name="city"><br>
<label for="region">Region:</label><br>
<input type="text" id="region" name="region"><br>
<label for="month">Month (MM):</label><br>
<input type="number" id="month" name="month">
<label for="day">Day (DD):</label><br>
<input type="number" id="day" name="day">
<label for="year">Year (YYYY):</label><br>
<input type="number" id="year" name="year">
<input type="submit" value="Submit"/>
</form>
</div>
<div id = "hours_section">
<p>{{ cityname }}</p>
<p>{{ year }}</p>
<p>{{ month }}</p>
<p>{{ day }}</p>
<p>{{ dayminuteorder }}</p>
</div>
</body>

Python代码:

import datetime
from datetime import timedelta
from geopy.geocoders import Nominatim
import astral
from timezonefinder import TimezoneFinder
from astral import LocationInfo
from astral.sun import sun
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route("/planetaryhours", methods=['GET', 'POST'])
def getinfo():
#user inputs
cityname = request.form.get('city')
countryname = request.form.get('region')
year = request.form.get('year')
month = request.form.get('month')
day = request.form.get('day'.)
addtest = month + day
return render_template("planetaryhours.html", cityname=cityname, countryname=countryname, year=year, month=month, day=day, addtest=addtest)

我不知道为什么我的代码不工作,我在网上看到的解决方案都没有帮助——我从昨天开始一直在搜索和谷歌搜索,没有运气。我是Flask的新手,我试图构建一个应用程序来获取用户输入来制作计算器,但每次我去测试我的应用程序时,我都会得到一些类型错误的变化,如:

"TypeError:不支持+:'NoneType'和'NoneType'的操作数类型;TypeError: int()参数必须是字符串、类字节对象或实数,不能是NoneType

我能够从表单中获取值并简单地将它们显示在页面上,但是当我想在python代码中使用它们进行计算时,我遇到了麻烦。它一直说输入变量(月、日和年)是NoneType,我不知道为什么,因为我可以很好地打印变量,它们显示在HTML页面上。只有当我尝试添加它们或转换为int时,才会得到TypeError消息。

有一个不同的方式,我应该这样做与Flask?

顺便说一句,有更多的代码——这就是所有安装包在顶部的原因。唯一阻碍程序其余部分运行的是请求.form.get()输入变量的TypeError问题,该变量为月、日和年。

您需要检查请求方法是POST还是GET,并且只有当其POST

时才开始尝试从表单中检索值
@app.route("/planetaryhours", methods=['GET', 'POST'])
def getinfo():
# initialize all variables as empty strings
# (I don't know the best way to do this, but I'm sure there is a better way)
cityname = countryname = year = month = day = addtest = ''
# check the method
if request.method == 'POST':
# this only happens when the user submits a request from the form
#user inputs
cityname = request.form.get('city')
countryname = request.form.get('region')
year = request.form.get('year')
month = request.form.get('month')
day = request.form.get('day')
addtest = month + day
else:
# you can also set variables beforehand
year=2022
return render_template("planetaryhours.html",
cityname=cityname,
countryname=countryname,
year=year,
month=month,
day=day,
addtest=addtest)

编辑:我忘了初始化所有使用的变量,所以添加了这些。

最新更新