注意:不能使用Javascript或iframe.事实上,我不能相信客户端浏览器可以做任何事情,除了超基础.
我正在重建一个传统的PHP4应用程序作为MVC应用程序,我的大多数研究目前都集中在Pylon的框架上.
我遇到的第一个奇怪的问题之一是我过去通过使用iframe或更好的javascript来解决的问题是显示动态的"小部件"集合,就像典型控制器的索引视图的摘要视图一样.
可视化我的问题的最佳方式是查看Google的个性化主页.他们用Javascript解决了这个问题,但是对于我的场景,javascript和基本XHTML之上的任何东西都是不可能的.
我开始研究的一个想法是让我的Frontpage控制器为当前激活的小部件轮询数据库或其他服务,然后获取元组/ dicts列表,动态实例化每个控制器并构建渲染子视图的列表/字典并传递那个到首页视图,让它解决问题.
所以使用peusudo代码:
Get request goes to WSGI
WSGI calls pylons
Pylons routes to Frontpage.index()
Frontpage.index()
myViews = list()
for WidgetController in ActiveWidegets():
myViews.append(subRender(WidgetController, widgetView))
c.subviews = myViews
render(frontpage.mako)
Run Code Online (Sandbox Code Playgroud)
关于subRender的奇怪的一点
__import__(当前硬编码到项目的命名空间:()我觉得必须有一个更好的方法或者可能已经在WSGI中实现的机制或更好的Pylons来实现这一点,但到目前为止,我发现最接近的是这种实用方法:http: //www.pylonshq.com/ docs/en/0.9.7/modules/controllers_util/#pylons.controllers.util.forward但是N为了获得集合视图,在pylons之上构建pylons实例似乎有点疯狂.
我正在使用cherrypy的独立服务器(cherrypy.quickstart())和sqlite3作为数据库.
我想知道如何在使用cherrypy时对数据库执行ajax/jquery异步调用?
我有一个类似的jQuery帖子
var arr = ['some', 'string', 'array'];
jQuery.post('saveTheValues', { 'values': arr },
function(data)
{
//do stuff with the returned data
}, 'json'
);
Run Code Online (Sandbox Code Playgroud)
它涉及一个cheerypy功能:
@cherrypy.expose
def saveTheValues(self, values=None):
#code to save the values
Run Code Online (Sandbox Code Playgroud)
但运行javascript返回400 Bad Request是因为Unexpected body parameters: values[].
如何将数组发送到cherrypy?
我有一台服务器需要能够接受JSON然后处理它然后再发送JSON.我服务器端的代码使用的是bottle.py和cherrypy.关注的路线如下:
@route ('/tagTweets', method='POST')
def tagTweets():
response.content_type = 'application/json'
# here I need to be able to parse JSON send along in this request.
Run Code Online (Sandbox Code Playgroud)
要请求此页面并测试功能,我正在使用请求模块代码:
我必须发送的数据是推文列表.数据本身是从某个服务器获取的,该服务器返回推文列表.对于获取推文,我正在使用requests.get然后使用响应对象的json方法.这工作正常.现在我经过一些处理,我必须发送这个json,就像我提取到另一台服务器.
url = "http://localhost:8080/tagTweets"
data = {'sender': 'Alice', 'receiver': 'Bob', 'message': 'We did it!'}
headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
r = requests.post(url, data=json.dumps(data), headers=headers)
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何获取访问请求的json发送.
我有一个服务器,提供大量的静态内容.只要支持gzip内容,就可以使用CherryPy工具tools.gzip压缩文件.
问题:CherryPy是否在每次请求时都会压缩静态文件,或者是否将内容gzip一次并将该gzip压缩文件提供给所有请求?
如果CherryPy目前每次请求时都会对文件进行压缩,那么启用tools.caching会阻止它,还是有更好的方法?
我正在使用 Django 开发一个工具,供我的组织内部使用。它用于搜索和标记文档(使用 Haystack 和 Solr),并将用于不同的项目。我的团队目前有一个工作原型,我们希望“在野外”部署它。
我们的安全环境很严格。项目文档位于网络驱动器上的子文件夹中,并且根据用户的 Windows 凭据限制对这些文件夹的访问(我们还有一个使用相同凭据的 MS SQL 服务器)。一个用户只能访问自己参与的项目。由于我们是微软的专卖店,如果我们想在公司内网部署我们的应用程序,我们需要使用一个IIS服务器来处理这些权限。团队中没有人具备使用 IIS、Active Directory 所需的知识,而且我们的 IT 部门已经人满为患。简而言之,我们不是网络开发人员,我们无法立即接触到任何有经验的人。
我的 hacky 解决方案是完全放弃 IIS,让每个最终用户在本地运行一个轻量级服务器(即 CherryPy),同时每个用户都保留对公共项目特定数据库的访问权限(例如,位于网络驱动器上的 SQLite DB 或 MS 上的 DB SQL 服务器)。为了使用该工具,他们只需启动一个多合一的批处理脚本并将浏览器指向127.0.0.1:8000. 我知道这有多丑陋,但我觉得它利用了已经到位的安全措施(请注意,在给定的项目中永远不要期望超过 10 个同时用户)。这是一个糟糕的主意吗,如果是这样,什么是更好的解决方案?
我正在使用以下函数来执行一个简单的 HTML 视图:
import cherrypy
class index(object):
@cherrypy.expose
def example(self):
var = "goodbye"
index = open("index.html").read()
return index
Run Code Online (Sandbox Code Playgroud)
我们的 index.html 文件是:
<body>
<h1>Hello, {var}!</h1>
</body>
Run Code Online (Sandbox Code Playgroud)
如何将 {var} 变量从我的控制器传递给视图?
我使用 CherryPy 微框架来运行 HTTP 服务器,我没有使用任何模板引擎。
我正在开发樱桃,我从python脚本开始.
为了更好的开发,我想知道在主进程中阻止cherrypy的正确方法是什么(而不是使用ctrl-c或SIGTERM从外部阻止).
我假设我必须从主应用程序注册一个回调函数,以便能够从工作线程中停止樱桃主进程.
但是如何从内部停止主流程呢?
我正在尝试安装并启动一个简单的CherryPy服务器作为Windows服务.
这是脚本:(删除了一些行来缩短它.当从命令行手动执行时它完全正常工作)
app = AdminMediaHandler(django.core.handlers.wsgi.WSGIHandler())
logged_app = TransLogger(app)
server = wsgiserver.CherryPyWSGIServer( ('127.0.0.1', 8632), logged_app, server_name='localhost', numthreads=20 )
try:
server.start()
except KeyboardInterrupt:
server.stop()
Run Code Online (Sandbox Code Playgroud)
我正在使用sc.exe安装和启动服务.安装顺利,但我似乎无法启动该服务.
使用的命令是:(注意路径中有空格,虽然我用双引号处理它,并且在binPath通过命令行手动执行其字符串时正在工作)
> sc.exe create "ServiceName" binPath= "\"C:\Path to Python\python.exe\" \"C:\Path to CherryPy Script\cherryserver.py\""
> sc.exe start "ServiceName"
Run Code Online (Sandbox Code Playgroud)
无论是尝试使用GUI sc.exe还是通过services.mscGUI 启动服务,我都会收到此错误:
[SC] StartService FAILED 1053:
The service did not respond to the start or control request in a timely fashion.
Run Code Online (Sandbox Code Playgroud)
据我所知,这是因为python.exe没有实现Windows服务API.
我不希望.exe使用py2exe从脚本创建一个.
我发现 …
我目前正在开发一个我们之前使用Django的项目.然而,这对我们的需求来说有点重量级,因此我们正在将项目转移到使用cherrypy,因为我们只需要处理请求.
我的问题是这个.我在html页面(index.html)上有一个表单,当用户点击提交时,执行以下jQuery函数.
$(document).ready(function() {
$("#loginform").submit(function() {
var request_data = {username:$("#username").val(),password:"test"};
$.post('/request',request_data, function(data) {
$("#error").html(data['response']);
});
return false;
});
});
Run Code Online (Sandbox Code Playgroud)
这很好用.以下Cherrypy方法应该获取请求数据,但似乎没有执行.这是请求的Cherrypy方法.
@cherrypy.expose
def request(self, request_data):
print "Debug"
cherrypy.response.headers['Content-Type'] = 'application/json'
return simplejson.dumps(dict(response ="Invalid username and/or password"))
Run Code Online (Sandbox Code Playgroud)
这只是一种测试方法,我希望在终端窗口中看到"Debug",并在点击提交按钮后显示在网页上的错误消息
在终端中,我在收到请求后收到此消息:
"POST /request HTTP/1.1" 404 1254 "http://127.0.0.1:8080/" "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-us) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1"
Run Code Online (Sandbox Code Playgroud)
这表明它找不到请求方法.我只能想到它与参数有关.
由于我是新手,我希望它是一个简单的东西,我错过任何指针都会很棒.
PS:以下工作,但我需要能够将多个数据传递给cherrypy.(cherrypy参数更改为用户名以允许此操作)
$(document).ready(function() {
$("#loginform").submit(function() {
$.post('/request',{username:$("#username").val()}, function(data) {
$("#error").html(data['response']);
});
return false;
});
});
Run Code Online (Sandbox Code Playgroud)
在此问题上提前感谢您提供任何帮助或指导.
这是我的完整樱桃文件.
import cherrypy
import webbrowser …Run Code Online (Sandbox Code Playgroud)