2017-01-04 4 views
-4

Ich möchte ein Formular anzeigen und nach der Eingabe der Details, wenn der Tag, Monat und Jahr eingegeben ist gültig Display Thanks Nachricht sonst das Formular erneut anzeigen, aber das Problem ist, wenn ich auf Senden klicken Ich erhalte keine Ausgabe, sondern nur einen leeren Bildschirm. In der Post-Prozedur ist ein Fehler aufgetreten.Mein Code gibt keine korrekte Ausgabe

import webapp2 
form=""" 
<form method="post"> 
    When is ur birthday? 
    <br> 
    <label> Month 
     <input type="text" name="month"> 
    </label> 
    <label> Day 
     <input type="text" name="day"> 
    </label> 
    <label> Year 
     <input type="text" name="year"> 
    </label> 
    <br> 
    <br> 
    <input type="submit"> 
</form> 
""" 

class MainPage(webapp2.RequestHandler): 
    months = ['January', 
       'February', 
       'March', 
       'April', 
       'May', 
       'June', 
       'July', 
       'August', 
       'September', 
       'October', 
       'November', 
       'December'] 
    def valid_month(month): 
     month= month.capitalize() 
     if month in months: 
      return month 
     else: 
      return None 

    def valid_day(day): 
     if day and day.isdigit(): 
      if int(day) in range(1, 32): 
       return int(day) 
     return None 

    def valid_year(year): 
     if year and year.isdigit(): 
      if int(year) in range (1900, 2021): 
       return int(year) 
     return None 

    def get(self): 
     self.response.out.write(form) 

    def post(self): 
     user_month = valid_month(self.request.get("month")) 
     user_day = valid_day(self.request.get("day")) 
     user_year = valid_year(self.request.get("year")) 
     if not (user_year and user_day and user_month): 
      self.response.out.write(form) 
     else: 
      self.response.out.write("Thanks!") 


app = webapp2.WSGIApplication([ 
    ('/', MainPage), 
], debug=True) 
+0

Versuchen Sie zu erklären, was "korrekte" Ausgabe bedeuten würde. Sie sollten auch eine Fehlermeldung hinzufügen. Wenn Sie sich den Beispielcode ansehen, sollte er nur das Formular anzeigen, in dem Sie geschrieben haben. Was erwarten Sie? –

+0

Fragen zur Fehlersuche (** "Warum funktioniert dieser Code nicht?" **) muss das gewünschte Verhalten, * ein spezifisches Problem oder einen Fehler * und * den kürzesten erforderlichen Code * enthalten, um es in der Frage selbst zu reproduzieren **. Fragen ohne ** eine klare Problemstellung ** sind für andere Leser nicht nützlich. Siehe: [Erstellen eines minimalen, vollständigen und überprüfbaren Beispiels] (http://stackoverflow.com/help/mcve). – MattDMo

+0

Hier ist das Tutorial: http://wsgi.tutorial.codepoint.net/parsing-the-request-post – GAEfan

Antwort

0

Das Problem war, dass man nicht richtig Aufruf der Prüffunktionen wurden. Die einfachste Lösung ist nur die Business-Logik außerhalb der Klasse zu stellen wie:

import webapp2 

form=""" 
<form method="post"> 
    When is ur birthday? 
    <br> 
    <label> Month 
     <input type="text" name="month"> 
    </label> 
    <label> Day 
     <input type="text" name="day"> 
    </label> 
    <label> Year 
     <input type="text" name="year"> 
    </label> 
    <br> 
    <br> 
    <input type="submit"> 
</form> 
""" 

months = ['January', 
      'February', 
      'March', 
      'April', 
      'May', 
      'June', 
      'July', 
      'August', 
      'September', 
      'October', 
      'November', 
      'December'] 

def valid_month(month): 
    month= month.capitalize() 
    if month in months: 
     return month 
    else: 
     return None 

def valid_day(day): 
    if day and day.isdigit(): 
     if int(day) in range(1, 32): 
      return int(day) 
    return None 

def valid_year(year): 
    if year and year.isdigit(): 
     if int(year) in range (1900, 2021): 
      return int(year) 
    return None 


class MainPage(webapp2.RequestHandler): 

    def get(self): 
     self.response.out.write(form) 

    def post(self): 
     user_month = valid_month(self.request.get("month")) 
     user_day = valid_day(self.request.get("day")) 
     user_year = valid_year(self.request.get("year")) 
     if not (user_year and user_day and user_month): 
      self.response.out.write(form) 
     else: 
      self.response.out.write("Thanks!") 


app = webapp2.WSGIApplication([ 
    ('/', MainPage) 
], debug=True) 

Wenn Sie es Absicht sind innerhalb der Klasse auf, die dann Sie wie zu tun, gehst zu haben, etwas

import webapp2 

form=""" 
<form method="post"> 
    When is ur birthday? 
    <br> 
    <label> Month 
     <input type="text" name="month"> 
    </label> 
    <label> Day 
     <input type="text" name="day"> 
    </label> 
    <label> Year 
     <input type="text" name="year"> 
    </label> 
    <br> 
    <br> 
    <input type="submit"> 
</form> 
""" 

class MainPage(webapp2.RequestHandler): 

    def valid_month(self, month): 
     months = ['January', 
       'February', 
       'March', 
       'April', 
       'May', 
       'June', 
       'July', 
       'August', 
       'September', 
       'October', 
       'November', 
       'December'] 

     month= month.capitalize() 
     if month in months: 
      return month 
     else: 
      return None 

    def valid_day(self, day): 
     if day and day.isdigit(): 
      if int(day) in range(1, 32): 
       return int(day) 
     return None 

    def valid_year(self, year): 
     if year and year.isdigit(): 
      if int(year) in range (1900, 2021): 
       return int(year) 
     return None 

    def get(self): 
     self.response.out.write(form) 

    def post(self): 
     user_month = self.valid_month(self.request.get("month")) 
     user_day = self.valid_day(self.request.get("day")) 
     user_year = self.valid_year(self.request.get("year")) 
     if not (user_year and user_day and user_month): 
      self.response.out.write(form) 
     else: 
      self.response.out.write("Thanks!") 


app = webapp2.WSGIApplication([ 
    ('/', MainPage) 
], debug=True)