【问题标题】:Multiple get methods Python google app engine多种获取方法 Python google app engine
【发布时间】:2012-07-13 16:58:18
【问题描述】:

python的一个类中可以有多个GET吗?

我试过这个:

import webapp2

class MainPage(webapp2.RequestHandler ):
    def get(self):
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write("test")

    def get(self, name, surname):
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write('N: %s S: %s' % (name , surname))   

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

但不起作用。

我该怎么做?处理两个不同路径的两个不同文件?

【问题讨论】:

    标签: django google-app-engine rest get


    【解决方案1】:

    任何 Python 类中不能有两个方法名称相同。

    相反,您应该定义两个不同的类,然后使用不同的 URL 模式匹配来选择使用哪个,而不是将所有内容 (/.*) 发送到单个类。

    这是一个(非常)基本的例子:

    class MainPage(webapp2.RequestHandler):
        def get(self):
            self.response.headers['Content-Type'] = 'text/plain'
            self.response.out.write("test")
    
    class NamePage(webapp2.RequestHandler):
        def get(self, name, surname):
            self.response.headers['Content-Type'] = 'text/plain'
            self.response.out.write('N: %s S: %s' % (name , surname))   
    
    app = webapp2.WSGIApplication([
            ('/(.+)/(.+)', NamePage), # Matches /foo/bar
            ('/.*', MainPage), # Matches everything else
        ], debug=True)
    

    【讨论】:

    • 所以这就像有 2 个不同的文件,对吧?我应该如何将它们映射到 yaml 文件中?
    • 不,这些都可以放在一个文件中。
    • 很好,但是 yaml 中的映射呢?
    • yaml 中的任何内容都不需要更改。您现有的 Python 文件只需要更新为如上所示。例如,请参见此处:webapp-improved.appspot.com/tutorials/gettingstarted/…
    • 或者,你可以有一个类和一个 get 方法,该方法具有可选参数。哪个更有意义取决于请求的性质。
    【解决方案2】:

    您在这里尝试尝试的是重载。 一种比创建类更微妙的方法如下:

    import webapp2
    
    class MainPage(webapp2.RequestHandler ):
    
        def get(self, name="default_name", surname="default_surname"):
            self.response.headers['Content-Type'] = 'text/plain'
            self.response.out.write('N: %s S: %s' % (name , surname))   
    
    app = webapp2.WSGIApplication([('/.*', MainPage)],debug=True)
    

    这里 name 和 surname 是可选的关键字参数(它们是您问题中的位置参数)。希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2015-11-06
      • 2011-05-12
      • 2012-09-26
      • 2016-06-28
      • 2011-12-19
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多