我在托管服务器上设置了一个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获取了禁用通用视图的行。
答案 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
。