在龙卷风应用程序的url中使正则表达式捕获组可选

时间:2014-01-07 14:51:25

标签: python regex tornado

我想在url中选择正则表达式捕获组。即我想通过一个处理程序同时处理example.com/urlexample.com/url/something

我可以使用(r'/0(/?\w*)', Handler),但这是正确的方法吗?如果我这样做,那么我需要一个if-else块来查看请求的url是/ 0还是/ 0 /。

理想情况下,我想要这样的东西。 (r'/0', r'/0/(\w+)' Handler)。一个处理程序,可以接受两种不同的url类型并对其进行处理。在处理程序实现中,我会看到输入到处理程序的参数是否为None,然后我会显示/ 0页面,并考虑用户已经提交了答案。

这就是我想要这样做的原因。我正在构建一个简单的测验应用,其中问题将由example.com/0网址呈现,用户将以example.com/0/answer的形式提交答案。我有100个问题。在这种情况下,如果我单独处理问题和答案,那么我将有200个处理程序对100个处理程序。

或者整体上这是一个糟糕的设计?我不得不创建100个处理程序,而是使用if-else块。有什么建议?

PS:我不想更改网址格式。即问题始终显示在example.com/0(而不是example.com/0/)上,用户将以example.com/0/answer

提交答案

1 个答案:

答案 0 :(得分:1)

我只会使用HTTP方法和单个处理程序:

class QuestionHandler(RequestHandler):
    def get(self, id):
        # Display the question

    def post(self, id):
        # Validates the answer
        answer = self.get_argument('answer')

application = Application([
    (r'/(\d+)', QuestionHandler),
])

但如果你坚持使用单独的处理程序:

class QuestionHandler(RequestHandler):
    def get(self, id):
        # Display the question

class AnswerHandler(RequestHandler):
    def post(self, id):
        # Validates the answer
        answer = self.get_argument('answer')

application = Application([
    (r'/(\d+)', QuestionHandler),
    (r'/(\d+)/answer', AnswerHandler),
])