첫 번째에서 가져온 핸들러를 설정하는이 정규식은 편안한 스타일의 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 등)를 찾는 정규식의 두 덩어리를 사용 처리기에서 나는 BaseHandler에 광산을 넣어하지만, 붙여 넣기 (재사용 가능한 기능 parseRestArgs를 정의 여기에 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...
동일하지만 난 정말 사용자가 직면위한 거라고와
편집 포스트 [레일] (http://api.rubyonrails.org/classes/Mime/Type.html)에서 볼 수있는 것과 같은 RESTful API 구현 – odgrim