python - cherrypy 中的静态 URL

标签 python url cherrypy

我有一个基于 python (cherrypy) 的网站服务器,我需要一些帮助。如果这个问题太基础了,我提前道歉。到目前为止,我在这方面还没有丰富的经验。

我的主页在 http://host:9090/home/static/index.html 上。 我想改写上面的地址,定义如下地址为主页面:http://host:9090/home/。代码本身应该留在同一个地方。我只想要一个更短的链接,这样 /home/static/index.html 也可以在 /home/ 中使用。

重写 URL 是我需要的吗?如果是这样,我找到了以下链接,但不幸的是我不知道如何在我的代码中实现它: http://www.aminus.org/blogs/index.php/2005/10/27/url_rewriting_in_cherrypy_2_1?blog=2

 cherrypy.config.update({
                            'server.socket_port': 9090,
                            'server.socket_host': '0.0.0.0'
                           })
    conf = {
        '/': {
                'tools.sessions.on': True,
                'tools.staticdir.root': os.path.abspath(os.getcwd())
             },
        '/static': {
                'tools.staticdir.on': True,
                'tools.staticdir.dir': './static/html'
             },
        '/js': {
                'tools.staticdir.on': True,
                'tools.staticdir.dir': './static/js'
             },
        '/css': {
                'tools.staticdir.on': True,
                'tools.staticdir.dir': './static/css'
             },
        '/img': {
                'tools.staticdir.on': True,
                'tools.staticdir.dir': './static/img'
             },
        '/fonts': {
                'tools.staticdir.on': True,
                'tools.staticdir.dir': './static/fonts'
        }

    }

    class Root(object):
        def __init__(self, target):
            self.target_server = target

    webapp = Root(args.target)
    cherrypy.quickstart(webapp, '/home', conf)

有人可以帮忙吗?

最佳答案

在我的项目中,我通常将'/' 直接指向静态文件夹。我更喜欢在我的 URL 中省略所有出现的 'static',恕我直言,仅通过一个 URL 提供资源是一种很好的做法。无论如何,如果必须通过不同的 URL 提供相同的静态资源,手动编写映射可能是一个简单的解决方案。

例如,文件夹结构如下所示:

repo \
    __init__.py
    main.py
    static \
        test \
            some-module.js

将根目录的路径作为全局变量很方便,这里我称之为SITE_ROOT

SITE_ROOT = '/home/user/repo'
conf = {
    '/': {
        'tools.staticdir.root': os.path.join(SITE_ROOT, 'static')
    },
    '/test': {
        'tools.staticdir.on': True,
        'tools.staticdir.dir': 'test'
    },
    '/static/test': {
        'tools.staticdir.on': True,
        'tools.staticdir.dir': 'test'
    },
}

现在两个 URL 都指向相同的静态资源,无需重定向。

http://127.0.0.1:8080/test/some-module.js
http://127.0.0.1:8080/static/test/some-module.js

进一步阅读:

https://cherrypy.readthedocs.org/en/3.3.0/progguide/files/static.html#forming-urls

关于python - cherrypy 中的静态 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34130186/

相关文章:

python - 使用 print 语句时显示特殊字符

php - 如何在 PHP 中管理博客文章 slug 标题之前的类别名称?

java - 获取字符串 url 并对其进行编码的最佳方法是什么

python - Cherrypy 服务器运行 python 脚本

mysql - AngularJS:使用 mySQL 数据库的双向数据绑定(bind)

python - Django - 让中间件与 View /模板通信

python - 在 python 中使用多进程模块运行多个 Gearman 进程

python - Librosa动态时间规整中的最小距离

url - 使用 Varnish 更改后端的 url 而不是客户端的 url

python - Apache 套接字没有关闭?