【问题标题】:Cherrypy mapping URL to functionCherrypy 映射 URL 到函数
【发布时间】:2012-03-20 13:49:59
【问题描述】:

我想在网站上使用 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 中所示,但我失败了。 我想我遗漏了一些教程中没有报告的配置。

有人有什么想法吗?
提前谢谢你

【问题讨论】:

    标签: python http-status-code-404 cherrypy


    【解决方案1】:

    我的错,我误解了一些配置。 我已经解决了这个问题:

    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的路径

    现在可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-23
      • 2020-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-03
      • 1970-01-01
      相关资源
      最近更新 更多