CherryPy表单提交未将日期输入识别为空

时间:2014-09-05 16:30:08

标签: python html python-2.7 cherrypy

我有一个表单,我请求用户提交一些不同的输入。然后在表单操作方法中,我指定如果任何输入为空,则将它们重定向到表单。这适用于除日期输入之外的所有输入。出于某种原因,它永远不会认为这是空的并且无论如何都会提交表单。我已尝试使用类型日期和类型文本。如果我删除日期输入表单工作正常。我已经尝试更改日期输入的名称(正如预期的那样,它没有修复)。它似乎固定在那个特定的输入上。

在下面的代码中,我已经注释掉db_func行,但是如果注释了它,它会通过if语句传递给else,如果包含日期输入则传递给else。

@cherrypy.expose
@require()
def new_flight(self, msg="Add new flight"):
    return """<html><body>
    <form method="post" action="/add_flight">
    %(msg)s<br />
    Departure Airport: <input type="text" name="airport_from"/><br />
    Arrival Airport: <input type="text" name="airport_to"/><br />
    Date: <input type="text" name="date"/><br />
    Carrier: <input type="text" name="carrier"/><br />
    Flight No.: <input type="number" name="flight_no"/><br />
    <input type="submit" value="Add Flight" />
    </html></body>""" % locals()

@cherrypy.expose
@require()
def add_flight(self, airport_from=None, airport_to=None, date=None, carrier=None, flight_no=None):
    if airport_from is None or airport_to is None or date is None or carrier is None or flight_no is None:
        return self.new_flight("Please enter all information")
    else:
        #db_func.add_flight(cherrypy.request.login,airport_from,airport_to,date,carrier,flight_no)
        return self.home(msg="Your flight has been added.")

我似乎无法弄清楚如何像所有其他输入一样对待日期。

2 个答案:

答案 0 :(得分:0)

您应该结束表单标记...

@cherrypy.expose
@require()
def new_flight(self, msg="Add new flight"):
    return """<html><body>
    <form method="post" action="/add_flight">
    %(msg)s<br />
    Departure Airport: <input type="text" name="airport_from"/><br />
    Arrival Airport: <input type="text" name="airport_to"/><br />
    Date: <input type="text" name="date"/><br />
    Carrier: <input type="text" name="carrier"/><br />
    Flight No.: <input type="number" name="flight_no"/><br />
    <input type="submit" value="Add Flight" />
    </form></html></body>""" % locals()

希望这有帮助!

答案 1 :(得分:0)

由于某种原因,当在日期框中输入值时,它也会为所有其他框分配一些空白值。该值不等于&#39;&#39;但通过改变if条件,我能够解决问题。而不是变量是None,我把它改为len(变量)&lt; 1.我不完全理解为什么问题正在发生,但是解决了这个问题。我的更新代码如下。

@cherrypy.expose
@require()
def new_flight(self, msg="Add new flight"):
    return """<html><body>
    <form method="post" action="/add_flight">
    %(msg)s<br />
    Departure Airport: <input type="text" name="airport_from"/><br />
    Arrival Airport: <input type="text" name="airport_to"/><br />
    Date: <input type="date" name="date"/><br />
    Carrier: <input type="text" name="carrier"/><br />
    Flight No.: <input type="number" name="flight_no"/><br />
    <input type="submit" value="Add Flight" />
    </form></html></body>""" % locals()

@cherrypy.expose
@require()
def add_flight(self, airport_from=None, airport_to=None, date=None, carrier=None, flight_no=None):
    if len(airport_from) < 1 or len(airport_to) < 1 or date=='' or len(carrier) < 1 or len(flight_no) < 1:
        return self.new_flight("Please enter all information")
    else:
        db_func.add_flight(cherrypy.request.login,airport_from,airport_to,date,carrier,flight_no)
        return self.home(msg="Your flight has been added.")