2

我不熟悉 CherryPy 和 Python,但我需要编写一个非常简单的 Web 应用程序来执行登录 ---> 执行一些命令 ---> 注销。对于登录,我使用以下链接中的代码:

http://tools.cherrypy.org/wiki/AuthenticationAndAccessRestrictions

应用程序是:

import cherrypy
import os.path
import struct
from auth import AuthController, require, member_of, name_is

class Server(object):
    led_power=0 
    led_switch=1 #Initial LED on

    _cp_config = {
        'tools.sessions.on': True,
        'tools.auth.on': True
    }   
    auth = AuthController()      
    @cherrypy.expose
    @require()
    def index(self,  switch='', power=''):
        if switch:
            self.led_switch = int(switch)
        if power:
            self.led_power = int(power)  

        html = open('led.html','r').read()

        if self.led_switch:
            print "ON"
        else:
            print "OFF"

        if self.led_power:
            print "Logout"
            cherrypy.session.clear()

        return html
    index.exposed = True


conf = {
    'global' : { 
        'server.socket_host': '0.0.0.0', #0.0.0.0 or specific IP
        'server.socket_port': 8080 #server port
    },

    '/images': { #images served as static files
        'tools.staticdir.on': True,
        'tools.staticdir.dir': os.path.abspath('images')
    },

    '/favicon.ico': {  #favorite icon
        'tools.staticfile.on': True,  
        'tools.staticfile.filename': os.path.abspath("images/bulb.ico")
    }
}
cherrypy.quickstart(Server(), config=conf)

html文件是:

<html>
<head>
</head>
<body>
<br>
<a href="?switch=1"><img src="images/on.png"></a>
<a href="?switch=0"><img src="images/off.png"></a>
<p>
<a href="?power=1"><img src="images/Logout.png"></a>
</body>
</html>

一个文件夹包含三个图像。

当我运行应用程序时,我可以在 localhost 上看到带有用户名和密码字段的登录页面,然后我可以访问包含三个按钮“ON、OFF、Logout”的网页。

问题是我必须单击注销按钮两次才能注销,当我再次登录并单击任何按钮(甚至是 ON 或 OFF 按钮)时,页面将注销并再次显示登录页面。我无法以正确的方式注销,请问有什么帮助吗?

谢谢

4

1 回答 1

0

尝试运行此代码。它调用 AuthController().logout() 函数。

import cherrypy
import os.path
import struct
from auth import AuthController, require, member_of, name_is

class Server(object):
    led_power=0 
    led_switch=1 #Initial LED on

_cp_config = {
    'tools.sessions.on': True,
    'tools.auth.on': True
}   
auth = AuthController()      
@cherrypy.expose
@require()
def index(self,  switch='', power=''):
    if switch:
        self.led_switch = int(switch)
    if power:
        self.led_power = int(power)  

    html = open('led.html','r').read()

    if self.led_switch:
        print "ON"
    else:
        print "OFF"

    if self.led_power:
        print "Logout"
        AuthController().logout()

        return html
    index.exposed = True


conf = {
    'global' : { 
        'server.socket_host': '0.0.0.0', #0.0.0.0 or specific IP
        'server.socket_port': 8080 #server port
    },

    '/images': { #images served as static files
        'tools.staticdir.on': True,
        'tools.staticdir.dir': os.path.abspath('images')
    },

    '/favicon.ico': {  #favorite icon
        'tools.staticfile.on': True,  
        'tools.staticfile.filename': os.path.abspath("images/bulb.ico")
    }
}
cherrypy.quickstart(Server(), config=conf)

希望这可以帮助。

安德鲁

于 2012-11-10T11:53:38.070 回答