2017-11-20 15 views
0

나는 벽돌 벽에 뛰어 들고있는 것처럼 느껴진다. 나는 이걸로 아무데도 못 가겠다. 나는 믿는다. 간단한 일.cherrypy로 여러 URL 경로를 생성하려면 어떻게해야합니까?

'/ path/to/url'과 같은 URL을 생성하려고하는데, StackOverflow Q & A를 참조하면, cherrypy의 공식 문서인데, 여전히 내 머리를 감싸고있는 것처럼 보이지 않습니다. 문제.

import details 
import input_checker as input 
import time 

import cherrypy 

class Index(object): 

    @cherrypy.expose 
    def input(self): 
     return input.check_input() 

    @cherrypy.expose 
    def stream(self): 
     while True: 
      return 'Hey' 
      #return input.check_input() 
      time.sleep(3) 

if __name__ == '__main__': 
    index = Index() 
    cherrypy.tree.mount(index.stream(), '/input/stream', {}) 
    cherrypy.config.update(
     {'server.socket_host': '0.0.0.0'}) 
    cherrypy.quickstart(index) 

그래서 본질적으로, 내가 http://127.0.0.1:8080/input/stream를 방문 할 수 있도록하려면, 난 지정된 결과로 반환됩니다 :

여기에 지금까지 내 코드입니다.

이 코드와 여러 변형을 실행 한 후에도 여전히 404 오류가 발견되지 않아 반환됩니다. 제대로 작동하려면 내가 무엇을해야하는지 잘 모르겠습니다.

내가 건너 뛸 수있는 팁 및/또는 지원 문서가 있습니까?

감사합니다.

답변

1

여기에 몇 가지 문제가 있습니다. 왜 MethodDispatcher을 사용해야하나요? 실제로 필요합니까?

같은 마운트하기 위해 당신이 /input/stream 당신에게 stream 기능을 제공합니다 :

cherrypy.tree.mount(index.stream(), '/input/stream', your_config) 

노트 대신 /stream/input/stream.

MethodDispatcher을 사용하고 있기 때문에이 엔드 포인트에 GET이 허용되지 않으므로 엔드 포인트가 405를 반환 할 가능성이 높습니다. 즉, MethodDispatcher 비트를 제거하기 만하면됩니다.

그러나 당신이 그런 일에 조금 리팩토링해야합니다 MethodDispatcher이 필요한 경우 :

class Stream: 
    exposed = True # to let cherrypy know that we're exposing all methods in this one 

    def GET(self): 
     return something 

stream = Stream() 
cherrypy.tree.mount(stream , '/index/stream', 
    {'/': 
     {'request.dispatch': cherrypy.dispatch.MethodDispatcher()} 
    } 
) 

는 또한 cherrypy 나무로 장착 할 때 실제로 메서드를 호출 할 수 있는지 확인하십시오, 이름 만 전달 function/class의

+0

죄송합니다, MethodDispatcher를 사용하지 않으려 고합니다. 나는 그것이 무엇을 의미하는지 정확히 모르겠다. (나는 모든 튜토리얼을 통과했다.) 그러나 나는 그것에 더 많은 것을 닦아야 할 것 같다. 어쨌든, 나는 메소드를 마운트했지만,'your_config'에 넣어야 할 것이 무엇인지 모르겠습니다. 왜냐하면 저는 이것을 가지고 있지 않기 때문입니다. 나는 현재 가지고있는 코드에 대한 나의 질문을 편집했다. – juiceb0xk

+0

@ juiceb0xk 빈 설정은'{}'을 거기에 넣고'index.stream() '대신'index.stream'을 사용하십시오. – user3012759

+0

훌륭합니다. 이 정보를 공식 문서와 연관 지을 수 있습니다. 프롬프트 정보 주셔서 감사합니다 :) – juiceb0xk