Статические html-файлы в Cherrypy

у меня проблема с тем, что должно быть основной концепцией в cherrypy, но пока я не смог найти учебник или пример, как это сделать (я новичок Cherrypy, быть мягким).

Проблема. (Это тестовый фрагмент, следовательно, отсутствие надежной аутентификации и сеансов в коде)

пользователь переходит к индексу.html-страница, которая является страницей входа в систему, вводит сведения, и если сведения не соответствуют тому, что находится в файле, возвращается сообщение об ошибке и отображается. Это работает! Если сведения верны, то пользователю показывается другой html-файл (сеть.html) Это бит, который я не могу заставить работать.

текущая файловая система выглядит так:-

AppFolder
  - main.py (main CherryPy file)
  - media (folder)
      - css (folder)
      - js (folder)
      - index.html
      - network.html

макет файлов кажется правильным, поскольку я могу получить доступ к индексу.формат html Код выглядит так: (у меня есть место комментария, где я пытаюсь вернуть новую страницу)

import cherrypy
import webbrowser
import os
import simplejson
import sys

from backendSystem.database.authentication import SiteAuth

MEDIA_DIR = os.path.join(os.path.abspath("."), u"media")

class LoginPage(object):
@cherrypy.expose
def index(self):
    return open(os.path.join(MEDIA_DIR, u'index.html'))

@cherrypy.expose
def request(self, username, password):
    print "Debug"
    auth = SiteAuth()
    print password
    if not auth.isAuthorizedUser(username,password):
        cherrypy.response.headers['Content-Type'] = 'application/json'
        return simplejson.dumps(dict(response ="Invalid username and/or password"))
    else:
        print "Debug 3"
        #return network.html here

class DevicePage(object):
@cherrypy.expose
def index(self):
    return open(os.path.join(MEDIA_DIR, u'network.html'))


config = {'/media': {'tools.staticdir.on': True, 'tools.staticdir.dir': MEDIA_DIR, }}

root = LoginPage()
root.network = DevicePage()

# DEVELOPMENT ONLY: Forces the browser to startup, easier for development
def open_page():
webbrowser.open("http://127.0.0.1:8080/")
cherrypy.engine.subscribe('start', open_page)

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

любая помощь или руководство в этом вопросе будет принята с благодарностью

Ура

Крис

1 ответов


у вас есть в основном два варианта. Если вы хотите, чтобы пользователь посетил /request и получить эту сеть.html-содержимое обратно, а затем просто верните его:

class LoginPage(object):
    ...
    @cherrypy.expose
    def request(self, username, password):
        auth = SiteAuth()
        if not auth.isAuthorizedUser(username,password):
            cherrypy.response.headers['Content-Type'] = 'application/json'
            return simplejson.dumps(dict(response ="Invalid username and/or password"))
        else:
            return open(os.path.join(MEDIA_DIR, u'network.html'))

другой подход будет для пользователя, чтобы посетить /request и, если разрешено, перенаправляться на контент по другому URL-адресу, возможно /device:

class LoginPage(object):
    ...
    @cherrypy.expose
    def request(self, username, password):
        auth = SiteAuth()
        if not auth.isAuthorizedUser(username,password):
            cherrypy.response.headers['Content-Type'] = 'application/json'
            return simplejson.dumps(dict(response ="Invalid username and/or password"))
        else:
            raise cherrypy.HTTPRedirect('/device')

затем их браузер делает повторный запрос на новый ресурс.