转义为webpy中的实例查询匹配的字符

时间:2015-09-21 17:56:08

标签: python regex sqlite python-2.7 web.py

(这里的标题可能有误,但我认为问题与转义字符有关)

我使用webpy创建了一个非常简单的待办事项列表,使用peewee和Sqlite存储简单的,用户提交的待办事项列表项目,例如"我的税收"或者"不要忘记与人和#34;等进行互动

我注意到,DELETE请求在包含特定符号的某些输入上失败。例如,虽然我可以将以下条目添加到包含所有用户输入的Sqlite数据库中,但我无法删除它们:

what?
test#
test & test 
This is a test?

任何其他用户输入以及任何其他符号我能够删除而没有任何问题。这是我尝试删除上面的输入列表时在浏览器中收到的webpy错误消息:

<class 'peewee.UserInfoDoesNotExist'> at /del/test
Instance matching query does not exist: SQL: SELECT "t1"."id", "t1"."title" FROM "userinfo" AS t1 WHERE ("t1"."title" = ?) PARAMS: [u'test']
Python  /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/peewee.py in get, line 2598
Web     POST http://0.0.0.0:7700/del/test

当我在sqlitebrowser中查看数据库文件(称为todoUserList.db)时,我可以看到这些条目确实存在符号,它们都在那里。 enter image description here

在我的主要webpy应用程序脚本中,我使用正则表达式搜索数据库以发出DELETE请求,它看起来像这样:

urls = (
    '/', 'Index',
    '/del/(.*?)', 'Delete'
)

我已尝试使用正则表达式的变体,例如'/del/(.*)',但仍会出现相同的错误,因此我不认为这是问题所在。

鉴于上面的错误消息,webpy不是&#34;看到&#34;用户输入中的某些符号,因为它们没有正确转义?

混淆为什么它似乎只发生在上面列出的选择符号上。

2 个答案:

答案 0 :(得分:1)

根据网址转发的运作方式,特别是“?”可能会出现问题。和“&amp;”由浏览器解释(在典型的GET样式请求中&amp;和?是用于分隔查询string parameters的特殊字符)

答案 1 :(得分:1)

不应将这些作为URL本身的一部分传递,而应将其作为转义的查询字符串传递给它们。据我所知,没有任何Web服务器会像URL那样尊重那些古怪的值。如果它们被转义并放入查询字符串(或POST主体),你会没事的。