2014-11-04 1 views
0

У меня есть URL-адрес в CherryPy похож на StackOverflow как:CherryPy вопрос URL

http://sample.com/post/12345/hello-world 

, но я хочу сделать следующий URL тоже работает в CherryPy:

http://sample.com/post/12345/hello-world?from=something&else=123 

и она должна быть исправлена до:

http://sample.com/post/12345/hello-world 

как я могу это сделать?

Я использую popargs и _cp_dispatch без успеха. любое предложение было бы оценено.

благодаря

EDIT

Я получил это работает на основе ответа SAAJ, но я хочу, чтобы переместить код индексировать(), и UR возвращают 404.

import cherrypy 

class App: 

@cherrypy.expose 
def index(self, id, name = None, **kwargs): 
    if kwargs: 
    # do your querystring processing 
    raise cherrypy.HTTPRedirect(cherrypy.url()) 

    if not name: 
    # get name part for canonical url 
    name = '{0}/hello-world'.format(id) 
    raise cherrypy.HTTPRedirect(cherrypy.url(name)) 

    return '{0} {1} {2}'.format(id, name, kwargs) 

if __name__ == '__main__': 
    cherrypy.quickstart(App(), '/post', config) 

больше помощи очень ценится. Я все еще новичок в cheerypy.

ответ

1
#!/usr/bin/env python 
# -*- coding: utf-8 -*- 


import cherrypy 


config = { 
    'global' : { 
    'server.socket_host' : '127.0.0.1', 
    'server.socket_port' : 8080, 
    'server.thread_pool' : 8 
    }, 
} 


class App: 

    @cherrypy.expose 
    def index(self): 
    return ''' 
     <ul> 
     <li> 
      <a href='/post/12345/hello-world'>/post/12345/hello-world</a> 
     </li> 
     <li> 
      <a href='/post/12345/hello-world?from=something&else=123'> 
      /post/12345/hello-world?from=something&else=123</a> 
     </li> 
     <li><a href='/post/12345'>/post/12345 (more like SO)</a></li>   
     </ul> 
    ''' 

    @cherrypy.expose 
    def post(self, id, name = None, **kwargs):  
    if kwargs: 
     # do your querystring processing 
     raise cherrypy.HTTPRedirect(cherrypy.url()) 

    if not name: 
     # get name part for canonical url 
     name = '{0}/hello-world'.format(id) 
     raise cherrypy.HTTPRedirect(cherrypy.url(name)) 

    return '{0} {1} {2}'.format(id, name, kwargs) 


if __name__ == '__main__': 
    cherrypy.quickstart(App(), '/', config) 
+0

Когда я перемещаю содержимое сообщения() в index(), то cherrypy.quickstart (App(), '/ post', config). он снова возвращает 404. Есть идеи? – triston

+0

@triston Вы видите это поведение, потому что метод '' index'' (http://cherrypy.readthedocs.org/en/3.3.0/tutorial/dispatching.html#index-methods) является особенным. Вот цитата '' Однако, в отличие от всех других обработчиков страниц, она не может принимать позиционные аргументы''. Также обратите внимание на понятие приложения CherryPy. Это то, что вы монтируете в дерево либо с помощью '' cherrypy.quickstart'', либо '' cherrypy.tree.mount''. Обычно он охватывает более крупный автономный объем, например, блог, магазин или панель администратора. Итак, для ваших первых шагов с CherryPy вы можете остаться с одним приложением для простоты. – saaj