2011-06-30 22 views
8

Kirazlarda temel bir kavram olması gereken bir konuyla ilgili bir sorun yaşıyorum ama henüz nasıl yapılacağına dair bir öğretici veya örnek bulamamışım (Cherrypy'li bir acemi, nazik davranıyorum) .Statik html Files in Cherrypy

Sorun. (Bu, bir Test parçasıdır, dolayısıyla kodda sağlam kimlik doğrulama ve oturumların olmaması)

Kullanıcı, ayrıntıları girilen bir giriş sayfası olan index.html sayfasına gider. dosyada bir hata mesajı döndürülür ve görüntülenir. Bu çalışıyor! Ayrıntılar doğruysa, kullanıcıya farklı bir html dosyası gösterilir (network.html) Bu, çalışamadığım bir bittir.

akım dosya sistemi şuna benzer: -

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

dosyaların düzen Ben index.html kodu şöyle erişebilirsiniz olarak doğru gibi görünüyor: (ı yerleştirir bir yorum nerede var Ben

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

bu konuda herhangi bir yardım veya rehberlik büyük takdir) yeni bir sayfa döndürmek için çalışıyorum

Alkış

Chris

cevap

5

Temel olarak iki seçeneğiniz vardır. Eğer kullanıcı /request ziyaret ve bu network.html içeriği geri almak istiyorsanız, o zaman sadece geri: Kullanıcı /request ziyaret etmek ve eğer yetkisi varsa, içerik yönlendirilmek için

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

diğer yaklaşım olur belki /device başka bir URL, saat:

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

Onların tarayıcı, daha sonra yeni kaynak için ikinci bir istekte bulunur.

+0

Tavsiye için alkışlar çok yardımcı oldu teşekkür ederim. – Lipwig