当我运行CherryPy Hello World时:
import cherrypy
class HelloWorld:
def index(self):
return "Hello world!"
index.exposed = True
cherrypy.config.update({'server.socket_port': 8080,})
cherrypy.quickstart(HelloWorld())
Run Code Online (Sandbox Code Playgroud)
...我明白了:IOError:端口8080没有绑定'localhost'.会是什么呢?
我想知道,因为据我所知,CherryPy纯粹是用Python构建的,这显然比C等慢.这是否意味着它只适用于开发/测试环境,或者我可以在NGINX后面使用它,就像我目前使用Apache和Fast CGI一样?
早上好.
正如标题所示,我对使用python进行Web开发有一些疑问.
我上次尝试apache + mod_python + CherryPy时的主要问题是不得不重新加载webserver来查看更改.它被认为是正常的吗?出于某种原因,cherrypy的自动重载根本不起作用.
将有效的Python应用程序部署到生产环境的最佳设置是什么?为什么?我现在使用lighttpd作为我的PHP Web应用程序,但与nginx相比,它对python有什么用?
是否值得直接用框架潜水或者滚动一些我自己的简单?我看到Django有很多粉丝,但我认为这对我的需求来说太过分了,所以我开始研究CherryPy.
如果我必须重新加载httpd以查看更改,那么Python应用程序究竟是如何服务的?类似于产生子进程的永久进程,所有主要文件包括在服务器启动时发生,然后只是延迟加载所需的资源?
Python支持多线程,在开发Web应用程序时,我是否需要考虑使用它来获益?什么是好处以及在什么情况下?
十分感谢!
POST到URL不同于获取它,删除它或将其删除.这些行为从根本上是不同的.但是,Django似乎在其调度机制中忽略了它们.基本上,一个人被迫完全忽略HTTP动词或在每个视图上执行此操作:
def my_view(request, arg1, arg2):
if request.method == 'GET':
return get_view(request, arg1, arg2)
if request.method == 'POST':
return post_view(request, arg1, arg2)
return http.HttpResponseNotAllowed(['GET', 'POST'])
Run Code Online (Sandbox Code Playgroud)
我在网上找到的几个解决方案(基于动词的调度的这个片段,或动词要求的这个装饰器)不是很优雅,因为它们显然只是解决方法.
CherryPy的情况似乎是一样的.我所知道的唯一正确的框架是web.py和Google App Engine.
我认为这是Web框架的一个严重的设计缺陷.有人同意吗?或者这是基于我忽略的原因/要求的故意决定?
我们正在设计一个基于CherryPy的系统,除了提供Web请求外,还需要并行执行任务/作业.我们希望它是作为守护进程运行的单个进程,并为所有并行作业(如计划任务或在线收集数据)创建线程.
我一直在浏览CherryPy文档,并知道它是为所有用户请求创建线程的线程池.但是,我似乎无法找到有关如何为自定义作业创建和管理线程的文档.CherryPy是否有一个我们可以挂钩的线程处理程序,或者我们应该编写我们自己的挂钩到CherryPy的处理程序吗?
我最近不得不重写我们的rest api,并从Flask切换到Cherrypy(主要是因为兼容Python 3).但现在我不得不尝试编写我的单元测试,Flask有一个非常漂亮的内置测试客户端,你可以使用它向你的应用程序发送虚假请求(无需启动服务器.)我找不到任何类似的功能对于Cherrypy,是否有这样的功能,或者我是不是在启动服务器并对它做实际请求?
我正在使用cherrypy构建Web应用程序.
你推荐我使用什么模板技术?
这是我第一次深入研究python中的web开发.我唯一的另一个经验是PHP,我之前从未使用过框架,所以我发现这非常令人生畏和困惑.
我有兴趣学习CherryPy/Jinja2为我的NAS制作ZFS监视器.我已经阅读了关于CherryPy/Jinja2的文档的基础知识,但我发现样本是脱节的而且过于简单化,我真的不明白如何使这两个东西"优雅地聚集在一起".
我有一些问题:
有没有一个简单的教程显示你如何使CherryPy和Jinja2很好地协同工作?我要么发现过于简单的样本,比如CherryPy/Jinja2文档中的样本,要么是复杂的样本.(例如:https: //github.com/jovanbrakus/cherrypy-example).
是否有标准化或"预期"的方式为CherryPy创建Web应用程序?(例子:我的目录结构应该是什么样的?有没有办法声明静态的东西;它甚至是必要的吗?)
有没有人为此推荐文献或在线文档是最好的资源?
在我写的一些源代码中,我能够提出如下请求:
http://proxy.metaperl.org/index/bitgold-rw1
Run Code Online (Sandbox Code Playgroud)
并成功重定向.
但是,我想index从URL中删除并使用该index()方法使其仍然重定向.我试图重新命名index(),以
default()阅读后
调度,但它仍然没有让我有这样的网址:
http://proxy.metaperl.org/bitgold-rw1
Run Code Online (Sandbox Code Playgroud)
它试图找到一个名为bitgold-rw1而不是使用默认方法来解析请求的方法,给我一个错误:
NotFound: (404, "The path '/bitgold-rw1' was not found.")
Run Code Online (Sandbox Code Playgroud)
WSGI启动文件如下所示:
# -*- python -*-
# core
import os
import sys
# 3rd party
import cherrypy
# local
def full_path(*extra):
return os.path.join(os.path.dirname(__file__), *extra)
sys.path.insert(0, full_path())
import config
import myapp
application = cherrypy.Application(
myapp.Root(),
"/",
config.config)
Run Code Online (Sandbox Code Playgroud) 我试图在Cherrypy的服务器上运行Bottle.我想获得SSL支持.
到目前为止,我试过这个:
from bottle import Bottle, route
from cherrypy import wsgiserver
app = Bottle()
@app.route("/")
def index():
return "Hello"
server = wsgiserver.CherryPyWSGIServer(
('0.0.0.0', 443), app)
server.ssl_adapter.private_key = 'server.key'
server.ssl_adapter.certificate = 'server.crt'
server.start()
Run Code Online (Sandbox Code Playgroud)
但是上面抛出了一个ArgumentError,我无法在None对象(ssl_adpater)上设置属性.显然我需要将ssl_adapter属性设置为从SSLAdapter派生的某个对象,但我找不到任何示例.
我使用的是Python 2.7和Cherrypy 3.2.2
谢谢.
cherrypy ×10
python ×8
daemon ×1
django ×1
frameworks ×1
jinja2 ×1
localhost ×1
port ×1
python-2.7 ×1
rest ×1
ssl ×1
templates ×1
unit-testing ×1
webserver ×1
wsgi ×1