【问题标题】:From list returned by query to integer in Tornado从查询返回的列表到 Tornado 中的整数
【发布时间】:2012-09-05 08:38:33
【问题描述】:

我有这些变量:

PERM_READ = 0x01
PERM_WRITE = 0x02
PERM_CMDS = 0x04

以及检查网络或传感器权限的功能。确定用户权限的函数。

这是函数:

def check_network_access(self, network, access=None, raise_err=True):
    if access is None:
        access = PERM_READ
    else:
        assert(access > 0)
        assert(access <= (PERM_READ + PERM_WRITE + PERM_CMDS))
    usr = self.get_current_user()
    usr_id = usr['id']
    # Does the network exist?
    net = self.get_network(network)
    if not net:
        raise tornado.web.HTTPError(404, "not found")

    self.lock_tables('read', ['nets_permissions'])
    perms = self.db.get("SELECT * FROM nets_permissions WHERE network_id=%s AND \
                        user_id=%s", network, usr_id)
    self.unlock_tables()
    if (not perms) or ((perms['perm'] & access) != access):
        if (raise_err):
            raise tornado.web.HTTPError(403, "access forbidden %s %s", perms['perm'], access)
        else: 
            return False
    return True

例如,当我使用此处理程序调用页面时出现错误:

class NetworkStatusHandler(BaseHandler):
# Requires authentication 
@tornado.web.authenticated
def get(self, nid):

    # Retrieve the current user 
    usr = self.get_current_user()
    usr_id = usr['id']

    perm = self.db.query("SELECT n.perm FROM nets_permissions as n \
                          WHERE n.network_id=%s AND n.user_id=%s", nid, int(usr_id))

    # Check whether the user has access to the network 
    perms = self.check_network_access(nid, perm)
    net = self.get_network(nid)
    # Render the networks page
    self.render("networkstatus.html", net=net)

我的错误是:

File "./wsn.py", line 264, in check_network_access
raise tornado.web.HTTPError(403, "access forbidden %s %s", perms['perm'], access)
HTTPError: HTTP 403: Forbidden (access forbidden 4 1)

我认为这是传递 cariable perm/访问函数的问题...我必须如何传递这个变量才能做到这一点是一个整数而不是一个列表?

感谢您的帮助!

【问题讨论】:

  • 你为什么这么想?已经检查过您传递给check_network_access 的具体内容了吗?
  • 我不知道如何在 Tornado 中查看变量。不知道怎么调试!请帮帮我
  • 但是我在 html 页面的什么地方看到了变量?
  • 在控制台启动你的tornado应用服务器,然后打印语句就会到那里。
  • 打印命令是什么? self.write(access)?

标签: python list variable-assignment tornado


【解决方案1】:

这是正确的方法:

class NetworkStatusHandler(BaseHandler):
# Requires authentication 
@tornado.web.authenticated
def get(self, nid):

    # Retrieve the current user 
    usr = self.get_current_user()
    usr_id = usr['id']

    self.lock_tables("read", ['nets_permissions as n'])
    perm = self.db.get("SELECT n.perm FROM nets_permissions as n \
                          WHERE n.network_id=%s AND n.user_id=%s", nid, int(usr_id))
    self.unlock_tables()

    # Check whether the user has access to the network
    perms = self.check_network_access(nid, perm['perm'])
    net = self.get_network(nid)
    # Render the networks page
    self.render("networkstatus.html", net=net)

使用 self.db.get 和 perm['perm'] 。谢谢!!!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 2021-07-01
    • 2017-04-18
    • 1970-01-01
    • 2016-11-16
    • 2013-04-27
    • 1970-01-01
    相关资源
    最近更新 更多