まずから取られ
^https?://(?:[a-z\-]+\.)+[a-z]{2,6}(?:/[^/#?]+)+\.(?:js|html|xml|json)$
解釈しやすいが、あまり堅牢だ例です、安らかなスタイルURIにカウントするようにハンドラを設定。私たちは、
class TaskServer(tornado.web.Application):
def __init__(self, newHandlers = [], debug = None):
request_format = "(\.[a-zA-Z]+$)?"
baseHandlers = [
(r"/jobs" + request_format, JobsHandler),
(r"/jobs/", JobsHandler),
(r"/jobs/new" + request_format, NewJobsHandler),
(r"/jobs/([0-9]+)/edit" + request_format, EditJobsHandler)
]
for handler in newHandlers:
baseHandlers.append(handler)
tornado.web.Application.__init__(self, baseHandlers, debug = debug)
今すぐIDと潜在的な要求フォーマット(つまり、HTML、XML、JSONなど)を探している正規表現の2つのチャンクを使用し、ハンドラで私はBaseHandlerでは地雷を置くが、貼り付け(再利用可能な機能parseRestArgsを定義しますそれは、IDのやり取りのフォーマットを分割する、理解の容易さ/スペースの節約のためのものです。あなたは特定の順序でIDのを期待する必要があるので、私はリストにそれらを固執する。
get関数は、より多くを抽象化することができますが、それは異なる要求フォーマットにあなたのロジックを分割する基本的な考え方を示しています...
class JobsHandler(BaseHandler):
def parseRestArgs(self, args):
idList = []
extension = None
if len(args) and not args[0] is None:
for arg in range(len(args)):
match = re.match("[0-9]+", args[arg])
if match:
slave_id = int(match.groups()[0])
match = re.match("(\.[a-zA-Z]+$)", args[-1])
if match:
extension = match.groups()[0][1:]
return idList, extension
def get(self, *args):
### Read
job_id, extension = self.parseRestArgs(args)
if len(job_id):
if extension == None or "html":
#self.render(html) # Show with some ID voodoo
pass
elif extension == 'json':
#self.render(json) # Show with some ID voodoo
pass
else:
raise tornado.web.HTTPError(404) #We don't do that sort of thing here...
else:
if extension == None or "html":
pass
# self.render(html) # Index- No ID given, show an index
elif extension == "json":
pass
# self.render(json) # Index- No ID given, show an index
else:
raise tornado.web.HTTPError(404) #We don't do that sort of thing here...
同じでポストを編集できますが、私は本当にユーザー向けのために行っていました[rails](http://api.rubyonrails.org/classes/Mime/Type.html)に見られるようなRESTfulなapiの実装 – odgrim