【问题标题】:Bottle route to handle POST and GET处理 POST 和 GET 的瓶子路由
【发布时间】:2015-04-17 16:16:27
【问题描述】:

在我的 webapp 代码中,我一直有这样的结构:

@app.route('some_method/<data>', method=['GET'], name='some_method')
def view(id):
    data = base64.urlsafe_b64decode(data)

    ...

@app.route('some_method', method=['POST'], name='some_method')
def view():
    data = request.files.values()[0].file.read() if len(request.files) else request.body.read()

    ...

其中... 是两个view 函数的相同代码。这不是很干燥。是否有任何既定的良好做法可以有效地处理瓶子应用程序中的 POST 和 GET ?

【问题讨论】:

  • 为什么不直接使用通用代码的函数?

标签: python post get wsgi bottle


【解决方案1】:

想到的最简单的方法是将“...”放入它自己的方法/函数中并调用它

def process_stuff(data):
   . . .

@app.route('some_method/<data>', method=['GET'], name='some_method')
def view(id):
    data = base64.urlsafe_b64decode(data)
    process_stuff(data)

@app.route('some_method', method=['POST'], name='some_method')
def view():
    data = request.files.values()[0].file.read() if len(request.files) else request.body.read()
    process_stuff(data)

【讨论】:

    【解决方案2】:

    我的方法是:

    @app.route('some_method', method=['GET', 'POST'], name='some_method')
    @app.route('some_method/<id>', method=['GET', 'POST'], name='some_method')
    def view(id=None):
        if id and request.method == 'POST':
            data = base64.urlsafe_b64decode(data)
        elif request.method == 'GET':
            data = request.files.values()[0].file.read() if len(request.files) else request.body.read()
        else
            pass # handle this 404 error
    
        ...
    

    【讨论】:

      猜你喜欢
      • 2019-12-15
      • 2018-04-20
      • 2015-05-28
      • 1970-01-01
      • 2012-04-16
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多