web2py - 在 web2py 请求参数中允许 %20

标签 web2py

我正在尝试获取在 URL 中传递编码字符串的请求。例如:

/application/controller/function/hello%20world

这样在我的函数中我就可以访问 request.args 并获得一个我可以取消引用()的字符串。

我尝试修改 rewrite.py 以不转换 %20 但这导致了一些错误。其他东西在我无法找到的地方捕获这些请求。我注意到 httpserver.log 文件有:
127.0.0.1, 2011-09-02 00:12:09, GET, /application/controller/function/hello world, HTTP/1.1, 200, 0.169954

空间已经转换。也许这给出了一个提示。网址在哪里未编码?

以下是我的路由文件的内容:
#!/usr/bin/python
# -*- coding: utf-8 -*-

default_application = 'chips'
default_controller = 'default'
default_function = 'index'


routes_onerror = [
   (r'*/404', r'/chips/static/404.html')
   ,(r'*/*',  r'/chips/static/error.html')
]

最佳答案

默认情况下,web2py 不允许在 args 中使用特殊字符,除了 '@'、'-'、'=' 和 '.'。要覆盖该行为,您可以将以下内容添加到 routes.py:

routes_apps_raw=['chips']

在这种情况下, request.args 将被设置为 None ,而您可以通过 request.raw_args 从 URL 访问原始参数。 .但请注意,routes_apps_raw如果您使用的是 parameter-based rewrite system,则不起作用(即,如果您的 routes.py 文件包含 routers 字典)。

请注意,即使进行了上述更改,web2py 中包含的 Rocket Web 服务器仍然会自动 unquote() URL,因此您将获得 request.raw_args 中的特殊字符,但它们已经被解码了。

如果您改用基于参数的重写系统,您可以通过 args_match 控制 URL 参数中允许使用哪些字符。键,它接受一个正则表达式作为它的值。默认正则表达式为 r'([\w@ -]|(?<=[\w@ -])[.=])*$' , 允许使用“@”、“-”、“=”和“.” (对 '=' 和 '.' 有一些限制)。

关于web2py - 在 web2py 请求参数中允许 %20,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7279198/

相关文章:

mysql - Web2Py MySQL 数据检索

python - 在 Google App Engine 上使用 web2py 上传文件

sql - web2py sqlform 网格修改编辑 View

python - 如何验证通过 AJAX 提交的 web2py 表单?

python - 多语言网站中的 GET 搜索

csv - web2py-python

google-app-engine - 如何在 web2py 和 google appengine 中缩短 url

python - web2py,一对多,非必需关系

line - 修改SQLFORM文本输出——换行符、段落(web2py框架)

javascript - 单击 RMB 时,jsTree 上下文菜单不显示在树节点上