用于处理POST和GET的瓶路径

时间:2015-04-17 16:16:28

标签: python post get wsgi bottle

在我的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?

2 个答案:

答案 0 :(得分:2)

想到最简单的方法就是放置&#34; ...&#34;进入它自己的方法/功能,然后调用它

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)

答案 1 :(得分:1)

我的approche将是:

@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

    ...