有人可以向我解释当前的python webframworks如何组合在一起吗?
我听说过的三个是CherryPy,TurboGears和Pylons.然而我很困惑,因为TurboGears似乎使用CherryPy作为'控制器'(虽然它本身不是CherryPy的框架吗?),而TurbGears 2将建立在Pylons之上(我认为它是一样?).
我需要配置支持以下URL方案的RESTful样式URL:
我想使用MethodDispatcher,以便上面的每一个都可以有GET/POST/PUT/DELETE函数.我让它为第一个和第二个工作,但无法弄清楚如何配置子部分的调度程序.我有这本书,但它几乎没有涵盖这个,我在网上找不到任何样本.
这是我当前配置MethodDispatcher的方法.
root = Root()
conf = {'/' : {'request.dispatch': cherrypy.dispatch.MethodDispatcher()}}
cherrypy.quickstart(root, '/parent', config=conf)
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.
我正在使用Py2exe在Windows 7 Pro(64位)上使用Python 2.6(32位)编译CherryPy(3.1)服务器.
此服务器将在没有GUI的情况下运行.
问题:
如果在没有GUI的情况下运行,我是否需要关注为此应用程序添加清单文件?
我需要在我的exe中包含w9xpopen.exe吗?
到目前为止,我的有限测试表明我不需要在我的可执行文件中包含清单文件或w9xpopen.exe以使其正常工作.
评论赞赏.
谢谢你,马尔科姆
根据SO/SF和其他站点的建议,我使用CherryPy作为WSGI服务器来启动我使用Flask构建的Python Web服务器的多个实例.每个实例都在自己的端口上运行,并且位于Nginx之后.我应该注意下面的内容确实对我有用,但我很困扰我以错误的方式处理了事情并且它"偶然"起作用.
这是我目前的cherrypy.conf文件:
[global]
server.socket_host = '0.0.0.0'
server.socket_port = 8891
request.dispatch: cherrypy.dispatch.MethodDispatcher()
tree.mount = {'/':my_flask_server.app}
Run Code Online (Sandbox Code Playgroud)
没有潜入我的Flask服务器太远,这是它的开始:
import flask
app = flask.Flask(__name__)
@app.route('/')
def hello_world():
return "hello"
Run Code Online (Sandbox Code Playgroud)
以下是我在命令行上发布的与Cherryd一起启动的命令:
cherryd -c cherrypy.conf -i my_flask_server
Run Code Online (Sandbox Code Playgroud)
问题是:
在CherryPy中包装Flask仍然是在生产中使用Flask的首选方法吗? /sf/ask/341917901/
这是使用.conf文件启动CherryPy并导入Flask应用程序的正确方法吗?我已经搜索过CherryPy文档,但我找不到任何与我在这里特别要做的匹配的用例.
是在单个机器上启动多个CherryPy/Flask实例以执行多个cherryd命令(使用-d等进行守护程序)的正确方法,每个端口都使用唯一的.conf文件(8891,8892等)?或者有更好的"CherryPy"方法来实现这一目标吗?
感谢您的帮助和见解.
好吧,我希望cherrypy在自动重载时杀死所有子线程,而不是"等待子线程终止",因为我的程序有自己的线程,我不知道如何通过它.CherryPy一直挂在那一行上,我不知道如何让"子线程"终止......
`
[05/Jan/2010:01:14:24] ENGINE HTTP Server cherrypy._cpwsgi_server.CPWSGIServer(('127.0.0.1', 8080)) shut down
[05/Jan/2010:01:14:24] ENGINE Stopped thread '_TimeoutMonitor'.
[05/Jan/2010:01:14:24] ENGINE Bus STOPPED
[05/Jan/2010:01:14:24] ENGINE Bus EXITING
[05/Jan/2010:01:14:24] ENGINE Bus EXITED
[05/Jan/2010:01:14:05] ENGINE Waiting for child threads to terminate...
Run Code Online (Sandbox Code Playgroud)
`
它永远不会继续..所以我想强迫孩子线程关闭...
我知道这是因为我的应用程序正在使用它自己的线程,我想cherrypy希望这些线程与CherryPy一起退出....我可以克服这个吗?
我有一台服务器位于example.com运行apache,提供我的静态html文件.
我也有一个json服务位于api.example.com运行python与cherrypy.
用户请求example.com并获取索引html页面.在那个页面上,我使用jquery向json服务发出ajax请求.document.domain返回example.com
$.ajax({
type: 'GET',
url: 'http://api.example.com/resource/',
dataType: 'json',
success: successCallback,
error: errorHandler
});
Run Code Online (Sandbox Code Playgroud)
但是,我无法在firebug中看到ajax请求的响应主体.这让我相信浏览器(FF)不支持这一点.
实现这一目标的最佳方法是什么?如果可能的话,我宁愿不在example.com的apache后端使用任何代理.
如何在cherrypy中添加retry-header?
import cherrypy
import os
class Root:
def index(self):
cherrypy.response.headers['Retry-After'] = 60
cherrypy.request.headers["Age"]= 20
cherrypy.config.update({'Retry-After': '60'})
raise cherrypy.HTTPError(503, 'Service Unavailable')
index.exposed = True
cherrypy.quickstart(Root())
Run Code Online (Sandbox Code Playgroud)
这个重试头dt有效.
有没有办法在python中更改cherrypy正在使用的端口并强制重新启动Web服务器(而不是apache,cherrypy)?
我试图通过他们的网站使用示例来测试cherrypy框架:
import cherrypy
class HelloWorld(object):
def index(self):
return "Hello World!"
index.exposed = True
cherrypy.quickstart(HelloWorld())
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我在控制台中得到了这个响应:
[05/Dec/2011:00:15:11] ENGINE Listening for SIGHUP.
[05/Dec/2011:00:15:11] ENGINE Listening for SIGTERM.
[05/Dec/2011:00:15:11] ENGINE Listening for SIGUSR1.
[05/Dec/2011:00:15:11] ENGINE Bus STARTING
CherryPy Checker:
The Application mounted at '' has an empty config.
[05/Dec/2011:00:15:11] ENGINE Started monitor thread '_TimeoutMonitor'.
[05/Dec/2011:00:15:11] ENGINE Started monitor thread 'Autoreloader'.
[05/Dec/2011:00:15:12] ENGINE Serving on 127.0.0.1:8080
[05/Dec/2011:00:15:12] ENGINE Bus STARTED
Run Code Online (Sandbox Code Playgroud)
当在本地运行浏览器并指向localhost:8080时,它可以工作,但在使用serverip时是外部世界:8080它没有.我是否必须在某处设置服务器的IP地址?
我有一个基于python(cherrypy)的网站服务器,我需要一些帮助.如果这个问题太基础,我很抱歉.到目前为止,我在这方面没有丰富的经验.
我的主页面已打开http://host:9090/home/static/index.html.我想重写上面的地址,并将以下地址定义为主页:http://host:9090/home/.代码本身假设保持在同一个地方.我只想要一个更短的链接,所以/home/static/index.html也可以使用/home/.
重写URL是我需要的吗?如果是这样,我发现了以下链接,但不幸的是我不知道如何在我的代码中实现它:http: //www.aminus.org/blogs/index.php/2005/10/27/url_rewriting_in_cherrypy_2_1?博客= 2
cherrypy.config.update({
'server.socket_port': 9090,
'server.socket_host': '0.0.0.0'
})
conf = {
'/': {
'tools.sessions.on': True,
'tools.staticdir.root': os.path.abspath(os.getcwd())
},
'/static': {
'tools.staticdir.on': True,
'tools.staticdir.dir': './static/html'
},
'/js': {
'tools.staticdir.on': True,
'tools.staticdir.dir': './static/js'
},
'/css': {
'tools.staticdir.on': True,
'tools.staticdir.dir': './static/css'
},
'/img': {
'tools.staticdir.on': True,
'tools.staticdir.dir': './static/img'
},
'/fonts': {
'tools.staticdir.on': True,
'tools.staticdir.dir': './static/fonts'
}
}
class Root(object):
def __init__(self, target):
self.target_server = target
webapp = Root(args.target)
cherrypy.quickstart(webapp, '/home', …Run Code Online (Sandbox Code Playgroud)