2011-06-30 13 views
8

Tengo un problema con lo que debería ser un concepto básico en cherrypy pero aún no he podido encontrar un tutorial o un ejemplo sobre cómo hacerlo (soy un novato cerebrito, sé gentil) .Archivos estáticos html en Cherrypy

El problema. (Esta es una pieza de prueba, por lo tanto, la falta de autentificación robusta y sesiones en el código)

El usuario va a la página index.html que es una página de inicio de sesión. Escribe los detalles y si los detalles no coinciden con está en el archivo, se devuelve y se muestra un mensaje de error. ¡Esto funciona! Si los detalles son correctos, se muestra un archivo html diferente al usuario (network.html) Este es el bit en el que no puedo trabajar.

El sistema de ficheros actual es el siguiente: -

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

El diseño de los archivos parece estar bien como puedo acceder al index.html El código es el siguiente: (Tengo un comentario lugares donde estoy tratando de devolver la nueva página)

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() 

Cualquier ayuda u orientación en esta materia sería muy apreciada

Saludos

Chris

Respuesta

5

Tiene básicamente dos opciones. Si desea que el usuario visite /request y conseguir que el contenido network.html espalda, entonces simplemente devolverlo:

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')) 

El otro método consiste en que el usuario visite a /request y, si está autorizado, será redirigido al contenido en otra URL, tal vez /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') 

Su navegador luego hacer una segunda solicitud de nuevo recurso.

+0

Saludos por el consejo fue muy útil gracias. – Lipwig

Cuestiones relacionadas