我想在url中选择正则表达式捕获组。即我想通过一个处理程序同时处理example.com/url
和example.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
答案 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),
])