根据URL动态路由到Flask操作

时间:2013-06-26 16:32:56

标签: python flask

想要一个快速而脏的Flask测试服务器,我可以在其中输入网址路径

0.0.0.0/**something**

并让它调用相同名称的相应方法。

这样的事情:

from flask import Flask
app = Flask(__name__)

@app.route('/<action>')
def do_it(action=None):

    if {PSEUDO: The method exists, call it}
    else:
        return 'Action not found'

def something():

    return 'Did something'

if __name__ == '__main__':
    app.run()

Flask是否有一种机制可以帮助解决这个问题,还是我必须弄乱反思?

2 个答案:

答案 0 :(得分:4)

允许客户端在您的服务器上运行任意代码是一个非常糟糕的主意。相反,请考虑将所有可用操作放在一个类中,并将选择限制在类的方法中:

from flask import Flask
app = Flask(__name__)

class Actions:
    def something(self):
        return 'Did something'

    def something_else(self):
        return 'Did something else'

my_actions = Actions()

@app.route('/<action>')
def do_it(action = None):
    op = getattr(my_actions, action, None)
    if callable(op):
        return op()
    else:
        return 'Action not found'

if __name__ == '__main__':
    app.run(debug = True)

答案 1 :(得分:3)

不确定它有多乱,但看起来很简单:

  try:                                                                        
      return globals()[action]()                                              
  except KeyError:                                                           
      return 'Action not found'