我正在构建一个Django应用程序,我在Ubuntu Linux主机上轻松运行(测试:)).我想打包没有源代码的应用程序,并将其分发到另一台生产机器.理想情况下,应用程序可以由./runapp命令运行,该命令启动运行python/django代码的CherryPy服务器.
我发现了几种方法:
我真的想要nr.2选项,我想包含我的Django应用程序,所以可以分发它而无需安装或配置其他东西.搜索互联网给我提供了更多的问题而不是答案,而且非常酸的味道,Django包装是一种神秘的艺术,每个人都知道,但没有人说.:)
我试过Freeze(失败),Cx_freeze(简易安装版本失败,存储库版本工作,但应用程序输出失败)和dbuilder.py上的红色(这应该工作,但不起作用 - 我猜).如果我理解正确,大多数问题都源于Django导入模块的方式(例子),但我不知道如何解决它.
如果有人能在线提供有关打包/分发独立Django应用程序的任何指示或好资源,我将非常高兴.
我使用Cherrypy 3.1.2将我的应用程序置于Nginx后面,配置为反向代理.All都适用于GET请求,但所有POST请求都返回HTTP 400 - 格式错误的标头.
我追溯到CherryPy WSGI-Server源代码以查看请求处理代码,并发现如果对于GET请求,第一个请求行正确读取,例如:
GET /home HTTP/1.0
Run Code Online (Sandbox Code Playgroud)
对于POST请求,它就像:
<HTTP headers truncated at front>
POST /home HTTP/1.0
Run Code Online (Sandbox Code Playgroud)
因此,对于包含GET/POST请求行后跟HTTP标头的正确形成的请求,对于我的应用程序从Nginx接收的POST请求,
此外,从p.1截断的字节数似乎取决于表单上有多少POST数据,例如,我在/ home FORM字段中键入的字符越多,HTTP标头中的字符就越多.
显然,当Nginx将标头传递给上游服务器(我的应用程序)时,它会以某种方式破坏标头.
但是:当我只是为了测试使Nginx重定向到一些外部网站(也使用POST请求) - 一切都很顺利.
所以我现在很困惑.
我的配置是:Windows XP Prof,Python/2.5.1,CherryPy/3.1.2,Nginx/0.8.32
浏览器:FireFox 2.0,IE 7.0
我的应用程序(独立运行)通常在许多配置下工作和测试.
我使用非常基本的Nginx配置,如:
upstream backend {
server localhost:8088 weight=1;
}
server {
listen 80;
server_name localhost;
location / {
#proxy_read_timeout 300;
proxy_pass http://backend;
#proxy_redirect default;
}
}
Run Code Online (Sandbox Code Playgroud)
尽管在网上找到了很多其他的proxy_pass示例和配置.
任何想法在哪里寻找问题?Nginx配置,我的CherryPy应用程序还是其他地方?
新:我发现,它工作正常,但仅适用于具有零主体内容长度的POST请求(在没有任何字段的情况下为空测试).
并验证从开始截断的字节数等于Content-length +一些小的const数(可能是2).
从CherryPy 3.0开始,只需指向服务器证书和私钥即可打开单向SSL,如下所示:
import cherrypy
class HelloWorld(object):
def index(self):
return "Hello SSL World!"
index.exposed = True
cherrypy.server.ssl_certificate = "keys/server.crt"
cherrypy.server.ssl_private_key = "keys/server.crtkey"
cherrypy.quickstart(HelloWorld())
Run Code Online (Sandbox Code Playgroud)
这使客户端能够验证服务器的真实性.有谁知道CherryPy是否支持双向ssl,例如服务器还可以通过验证客户端证书来检查客户端的真实性?
如果是的话,任何人都可以举例说明这是怎么做的?或者发布一个例子的参考?
ssl certificate cherrypy client-certificates ssl-certificate
我是来自Django的CherryPy的新手.我喜欢Django将项目的各个部分分成许多文件的方式,我想在CherryPy中做同样的事情,而不是有一个大文件.
我认为如果我能在这些部分拆分项目会很棒:
我不是要求在这里完整的代码粘贴,一个示例/ pastebin/gist的链接也是完美的:)
谢谢你的帮助.
我有一个问题,应该是一个基本的概念在cherrypy但是我一直无法找到关于如何做到这一点的教程或例子(我是一个Cherrypy新手,温柔).
问题.(这是一个测试部分,因此代码中缺乏强大的身份验证和会话)
用户转到index.html页面,该页面是登录页面,用于输入详细信息,如果详细信息与文件中的内容不匹配,则会返回并显示错误消息.这有效!如果细节是正确的,那么向用户显示不同的html文件(network.html)这是我无法工作的一点.
当前的文件系统如下所示: -
AppFolder
- main.py (main CherryPy file)
- media (folder)
- css (folder)
- js (folder)
- index.html
- network.html
Run Code Online (Sandbox Code Playgroud)
文件的布局似乎是正确的,因为我可以访问index.html代码看起来像这样:(我在我试图返回新页面时放置了注释)
import cherrypy
import webbrowser
import os
import simplejson
import sys
from backendSystem.database.authentication import SiteAuth
MEDIA_DIR = os.path.join(os.path.abspath("."), u"media")
class LoginPage(object):
@cherrypy.expose
def index(self):
return open(os.path.join(MEDIA_DIR, u'index.html'))
@cherrypy.expose
def request(self, username, password):
print "Debug"
auth = SiteAuth()
print password
if not auth.isAuthorizedUser(username,password):
cherrypy.response.headers['Content-Type'] = 'application/json'
return simplejson.dumps(dict(response ="Invalid username and/or password"))
else:
print "Debug 3"
#return …Run Code Online (Sandbox Code Playgroud) 我知道有很多关于Flask和CherryPy以及静态文件的问题,但我似乎仍然无法使其工作.
这里有一个片段可以在CherryPy上部署Flask应用程序:http: //flask.pocoo.org/snippets/24/
是否有快速修改让wsgiserver提供烧瓶应用程序的静态目录中的内容?
CherryPy的静态内容功能似乎位于CherryPy中.我不确定如何安装CherryPy应用程序,除了在使用此代码段时提供静态内容之外什么都不做.
我正在尝试使用索引等构建一个小网站,并在/ api中创建一个我想要的api.
例如:
class Site(object):
@cherrypy.expose
def index(self):
return "Hello, World!"
@cherrypy.expose
def contact(self):
return "Email us at..."
@cherrypy.expose
def about(self):
return "We are..."
class Api(object):
@cherrypy.expose
def getSomething(self, something):
db.get(something)
@cherrypy.expose
def putSomething(self, something)
Run Code Online (Sandbox Code Playgroud)
所以,我希望能够访问mysite.com/contact和mysite.com/Api/putSomething
如果我使用cherrypy.quickstart(Site()),我只会获得网站下的页面.
我认为有一种方法可以将类Api映射到/ Api下,但我找不到它.
运行CherryPy应用程序时,它会发送类似CherryPy/version的服务器名称标签.是否可以在不修改CherryPy的情况下从应用程序重命名/覆盖它,以便显示其他内容?
也许像MyAppName/version(CherryPy/version)之类的东西
我有一个运行Twisted的应用程序,reactor.run()在启动一些其他线程(包括CherryPy Web服务器)后,在我的主线程中启动reactor .这是一个在Linux上按下Ctrl + C但在Windows上没有按下时干净关闭的程序:
from threading import Thread
from signal import signal, SIGINT
import cherrypy
from twisted.internet import reactor
from twisted.web.client import getPage
def stop(signum, frame):
cherrypy.engine.exit()
reactor.callFromThread(reactor.stop)
signal(SIGINT, stop)
class Root:
@cherrypy.expose
def index(self):
reactor.callFromThread(kickoff)
return "Hello World!"
cherrypy.server.socket_host = "0.0.0.0"
Thread(target=cherrypy.quickstart, args=[Root()]).start()
def print_page(html):
print(html)
def kickoff():
getPage("http://acpstats/account/login").addCallback(print_page)
reactor.run()
Run Code Online (Sandbox Code Playgroud)
我相信CherryPy是这里的罪魁祸首,因为这是我在没有CherryPy的情况下编写的另一个程序,当按下Ctrl + C时,它会在Linux和Windows上完全关闭:
from time import sleep
from threading import Thread
from signal import signal, SIGINT
from twisted.internet import reactor
from twisted.web.client import getPage
keep_going = …Run Code Online (Sandbox Code Playgroud) 我注意到cherrypy session不需要密钥配置.相反,Pylons会话确实:http://docs.pylonsproject.org/projects/pylons_framework/dev/sessions.html
如果我使用会话来记住用户身份验证,我会担心安全问题.
任何人都可以解释为什么cherrypy session不需要密钥?或者有什么建议我应该如何使用session来记住用户登录?
cherrypy ×10
python ×7
linux ×2
certificate ×1
deployment ×1
django ×1
flask ×1
nginx ×1
pylons ×1
ssl ×1
twisted ×1
windows ×1
wsgiserver ×1