Web2Py无法禁用通用视图

时间:2014-08-21 17:57:34

标签: python web2py

我在托管服务器上设置了一个Web2Py环境,并在models\db.py内添加了一行:

 response.generic_patterns = ['*'] if request.is_local else []

但是当我导航到 serveraddress.com/testapp/default/testpage.json 时,我得到了:

  

{" testlist":[" PolarBear"," Badger"," MonkeyFootball"," WonkyWilly"] }

这是我从函数返回的内容。

老实说,这句话:

 response.generic_patterns = ['*'] if request.is_local else []

对我没用。它看起来像一个列表理解语句应该在[ ]里面变成一个列表,但我想这是另一个话题。主要是我关注此时禁用通用视图。

我从the Web2Py manual获取了禁用通用视图的行。

2 个答案:

答案 0 :(得分:2)

首先,默认情况下禁用通用视图。以下代码:

response.generic_patterns = ['*'] if request.is_local else []

不会禁用通用视图,而只是为本地请求启用它们。要完全禁用通用视图,只需删除该行。

其次,如果您的testpage函数直接返回JSON(即实际字符串),则通用视图不是问题,因为视图仅在控制器函数返回字典时调用。如果您的函数返回一个JSON字符串,那么无论您在response.generic_patterns设置如何,都会直接返回该字符串,无论您使用testpage设置。

但是,如果request.is_local正在返回字典并且您通过generic.json视图返回JSON响应,则可能是您在代理后面,这将导致web2py将所有请求视为本地。在这种情况下,不要依赖['*'] if request.is_local else []来区分本地和外部请求。

最后,{{1}}语法只是一个Python conditional expression(也称为三元运算符)。

答案 1 :(得分:1)

通过request.is_local的逻辑跟踪/调试您的方式。您可能正在从其他计算机启动请求,但如果请求以某种方式由本地组件(代理服务器?SSL守护程序?)处理或重复,则web2py看到的请求可能是本地的。

使用不同类型的代理时,这是一个常见问题。通常的解决方案是使用现有的代理转发标头或添加新的HTTP标头并稍微自定义is_local