需要从lib.py中的main.py访问self.request.GET

时间:2016-09-15 04:55:13

标签: python webapp2

我需要在lib.py中进行其他事情的计算,我需要访问main.py中的用户输入数据,因为它需要这样。我该怎么做?

从主要导入lib.py中的MainHandler,然后调用它"工作"从某种意义上说,它没有给出任何代码错误,但是当这样做时显示一个空白页面,我收到一个日志错误,说我无法导入它。

main.py

import webapp2
from lib import FormData
from pages import FormPage
from pages import ResultsPage


class MainHandler(webapp2.RequestHandler):
    def get(self):
        f = FormPage()
        s = ResultsPage()
        fd1 = FormData()

    if self.request.GET:
        fd1.name = self.request.GET['name']
        fd1.email = self.request.GET['email']
        fd1.weight = self.request.GET['weight']
        fd1.height = self.request.GET['height']
        self.response.write(s.second_page(fd1.name, fd1.email, fd1.weight, fd1.height))
    else:
        self.response.write(f.form_page)

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

lib.py

class FormData(object):
    def __init__(self):
        pass

我需要能够访问:

fd1.name = self.request.GET['name']
fd1.email = self.request.GET['email']
fd1.weight = self.request.GET['weight']
fd1.height = self.request.GET['height']

在lib.py中

1 个答案:

答案 0 :(得分:1)

你的if / else语句不在get方法之内,因此它甚至不能正常工作。

我认为最干净的方法是将请求数据传递给初始化程序中已有的FormData类。所以代码看起来像这样:

main.py

import webapp2
from lib import FormData
from pages import FormPage
from pages import ResultsPage


class MainHandler(webapp2.RequestHandler):
    def get(self):
        f = FormPage()
        s = ResultsPage()
        fd1 = FormData(data=self.request.GET)

        if fd1.name: # This is None, if form has not been submitted
            self.response.write(s.second_page(fd1.name, fd1.email, fd1.weight, fd1.height))
        else:
            self.response.write(f.form_page)

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

lib.py

class FormData(object):

    def __init__(self, data):
        self.name = data.get('name')
        self.email = data.get('email')
        self.weight = data.get('weight')
        self.height = data.get('height')

作为旁注,我真的不知道这个webapp2框架,所以可能有更好的方法来做到这一点。