2015-12-07 16 views
9

Mam serwer strony internetowej oparty na pythonie (cherrypy) i potrzebuję pomocy. Z góry przepraszam, jeśli to pytanie jest zbyt proste. Nie mam do tej pory dużego doświadczenia w tej dziedzinie.Statyczny adres URL w cherrypy

Moja główna strona to http://host:9090/home/static/index.html. Chcę przepisać adres powyżej i zdefiniować następujący adres jako stronę główną: http://host:9090/home/. Sam kod powinien pozostać w tym samym miejscu. Chcę tylko krótszy link, więc /home/static/index.html będzie dostępny również w /home/.

Czy adres URL przepisujący zmiany jest tym, czego potrzebuję? Jeśli tak, znalazłem następujące łącze, ale niestety nie wiem jak zaimplementować go w moim kodu: 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) 

Każdy może pomóc?

+0

@qarma Jak już wspomniano wyżej, muszę przepisać URL. – Omri

Odpowiedz

2

W moich projektach zwykle wskażę '/' bezpośrednio do folderu statycznego. Wolę pominąć wszystkie wyglądy w moich URL-ach pod adresem 'static' i imho to dobra praktyka, aby podawać zasoby tylko za pomocą dokładnie jednego adresu URL. W każdym razie może to być proste rozwiązanie ręcznego zapisu mapowania, jeśli ten sam statyczny zasób musi być obsługiwany przez różne adresy URL.

Na przykład, struktura folderów wygląda następująco:

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

To poręczne mieć ścieżkę do katalogu głównego jako zmienną globalną, tutaj ja to nazywam 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' 
    }, 
} 

Teraz oba adresy URL prowadzą do tego samego zasobu statycznego, bez przekierowania.

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

Dalsze czytanie:

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