Cherrypy сопоставление URL для функции - PullRequest
0 голосов
/ 02 марта 2012

Я пытаюсь использовать Cherrypy для веб-сайта, но у меня есть некоторые проблемы с отображением URL страницы, которую я хочу отобразить с помощью функции в коде Python.

Теперь у меня есть этот код

#!/usr/bin/env python

import os
localDir = os.path.dirname(__file__)
absDir = os.path.join(os.getcwd(), localDir)


import cherrypy
from genshi.template import TemplateLoader
loader = TemplateLoader('../html', auto_reload=True)

class Root(object):

    @cherrypy.expose
    def index(self):
        tmpl = loader.load('index.html')
        return tmpl.generate().render('html', doctype='html')

    @cherrypy.expose
    def upload(self, datafile):
        #do something
        ...
        return out % (size, datafile.filename, datafile.content_type)

    cherrypy.root.index = index
    cherrypy.root.upload = upload


conf = os.path.join(os.path.dirname(__file__), 'server.config')

cherrypy.quickstart(Root(), '/', config=conf)

И файл конфигурации таков:

[/index.html]
tools.staticfile.on = True
tools.staticfile.filename = "/path-to-file/html/index.html"

[/impemails.html]
tools.staticfile.on = True
tools.staticfile.filename = "/path-to-file/html/impemails.html"

[/css/style.css]
tools.staticfile.on = True
tools.staticfile.filename = "/path-to-file/css/style.css"

[/css/index.css]
tools.staticfile.on = True
tools.staticfile.filename = "/path-to-file/css/index.css"

[/css/imp.css]
tools.staticfile.on = True
tools.staticfile.filename = "/path-to-file/css/imp.css"

Для всех файлов, указанных в файле конфигурации, проблем нет, но когда я пытаюсь получить доступ к загрузке по ссылке http://localhost:8080/upload, я получаю «404 Not found Message»

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/cherrypy/_cprequest.py", line 656, in respond
    response.body = self.handler()
  File "/usr/local/lib/python2.7/dist-packages/cherrypy/lib/encoding.py", line 188, in __call__
    self.body = self.oldhandler(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/cherrypy/_cperror.py", line 386, in __call__
    raise self
NotFound: (404, "The path '/upload' was not found.")

Я пробовал много разных способов решить эту проблему, как показано в руководстве http://docs.cherrypy.org/dev/concepts/dispatching.html, но мне не удалось. Я думаю, что мне не хватает некоторых конфигураций, которые не описаны в руководстве.

У кого-нибудь есть идеи?
Заранее спасибо

1 Ответ

3 голосов
/ 02 марта 2012

Боже мой, я неправильно понял некоторые конфигурации. Я решил с этим:

class Root(object):

    @cherrypy.expose
    def index(self):
        tmpl = loader.load('index.html')
        return tmpl.generate().render('html', doctype='html')


@cherrypy.expose
def upload(couchdb, maillist, datafile):
    return "upload file"

conf = os.path.join(os.path.dirname(__file__), 'server.config')

root = Root()
root.upload = upload

cherrypy.tree.mount(root, '/', config=conf)
cherrypy.engine.start()
cherrypy.engine.block()

По сути, я просто переместил функцию за пределы класса Root и добавил путь с помощью root.upload = upload

Теперь это работает.

...