【问题标题】:Unescaping URL Parameter w/ Web.py使用 Web.py 转义 URL 参数
【发布时间】:2013-02-01 18:29:10
【问题描述】:

读取一个url如下:

example.com/product/xy&z

urls = ('/product/(.*)', product)

在 GET 上的产品类中,我正在读取从 URL 中提取的产品 ID (xy&z) 以创建数据库查询。其中一些 ID 中有一个“&”,当我在 python 中收到该值时,它已被转义。我的运气为零,因此我可以正确运行查询。以下方法不起作用:

product = product.replace("&", "&")
product = HTMLParser.unescape.__func__(HTMLParser,product)

Web.py 甚至 Python 的最佳实践是什么?什么是我自己诊断的最好方法?谢谢!

【问题讨论】:

  • 你试过了吗:import HTMLParser; HTMLParser.HTMLParser().unescape( product )
  • 这对我有用... def main(): product = "www.site.com/xx&y" print product product = product.replace("&", "&" ) 打印产品 main()
  • 我在猜测,但很确定 web.py 是如何处理该值的。我可以制作一个字符串并使用替换没问题。问题是通过 web.py 读取这个变量,它以不同的方式处理这个值,并且没有一个典型的选项可以工作。也不知道如何通过 web.py 进行诊断。
  • product = HTMLParser.unescape.__func__(HTMLParser,product) 行是干什么用的?
  • 没什么,对不起,这是一个错字,我把它拿出来并用伯尼的例子代替。没有运气。

标签: python python-2.7 web.py


【解决方案1】:

我正在开箱即用地获取这些产品 ID,请参阅以下代码。

import web

urls = (
    "/product/(.*)", "Product"
)


class Product:
    def GET(self, product_id):
        return product_id


app = web.application(urls, globals())


if __name__ == "__main__":
    #app.run()
    assert web.__version__ == "0.37"
    b = app.browser()
    b.open('/product/xy&z')
    assert b.status == 200
    assert "xy&z" in b.data
    assert "xy&z" not in b.data
    b.open('/product/xy&z')
    assert "xy&z" in b.data

请提供不返回所需产品 ID 的失败网址。

【讨论】:

  • 感谢您让我的方向正确。假设问题出现在 sql 查询之前,我跳过了一段代码,但事实并非如此。我遇到的问题是创建要在查询中使用的字典。在字典的声明中,我调用了 product_id 使用 web.websafe 来逃避它。呃,非常感谢你让我走上正轨,下次需要自己赶上。
  • 不客气!以下是有关测试 web.py 应用程序的更多信息:webpy.org/cookbook/browser_test,但有时您可能只是输入print,它会在从集成 Web 服务器运行 web.py 应用程序时输出到控制台
  • 太棒了!感谢您提供的补充信息。有时 webpy 文档非常杂乱无章,很难找到正确的信息。
猜你喜欢
  • 2010-12-23
  • 2022-06-17
  • 1970-01-01
  • 2010-11-27
  • 1970-01-01
  • 2016-06-21
  • 2013-09-01
  • 1970-01-01
相关资源
最近更新 更多