标签: cherrypy

许多控制器的一个视图(首页)(子视图)

注意:不能使用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实例似乎有点疯狂.

python model-view-controller pylons cherrypy

1
推荐指数
1
解决办法
482
查看次数

如何使用cherrypy进行async ajax调用?

我正在使用cherrypy的独立服务器(cherrypy.quickstart())和sqlite3作为数据库.

我想知道如何在使用cherrypy时对数据库执行ajax/jquery异步调用?

python ajax jquery asynchronous cherrypy

1
推荐指数
1
解决办法
3663
查看次数

如何将javascript数组发送到cherrypy

我有一个类似的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?

python jquery cherrypy

1
推荐指数
1
解决办法
1861
查看次数

通过请求模块发送JSON并使用bottle.py和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发送.

python json cherrypy bottle python-requests

1
推荐指数
1
解决办法
7077
查看次数

CherryPy - 缓存静态文件

我有一个服务器,提供大量的静态内容.只要支持gzip内容,就可以使用CherryPy工具tools.gzip压缩文件.

问题:CherryPy是否在每次请求时都会压缩静态文件,或者是否将内容gzip一次并将该gzip压缩文件提供给所有请求?

如果CherryPy目前每次请求时都会对文件进行压缩,那么启用tools.caching会阻止它,还是有更好的方法?

python caching cherrypy

1
推荐指数
1
解决办法
2094
查看次数

将 Django 部署为独立的内部应用程序?

我正在使用 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 个同时用户)。这是一个糟糕的主意吗,如果是这样,什么是更好的解决方案?

iis django wsgi cherrypy django-haystack

1
推荐指数
1
解决办法
842
查看次数

将变量传递给 Python 上的 html 文件

我正在使用以下函数来执行一个简单的 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

1
推荐指数
1
解决办法
2万
查看次数

如何从内部关闭cherrypy?

我正在开发樱桃,我从python脚本开始.

为了更好的开发,我想知道在主进程中阻止cherrypy的正确方法是什么(而不是使用ctrl-c或SIGTERM从外部阻止).

我假设我必须从主应用程序注册一个回调函数,以便能够从工作线程中停止樱桃主进程.

但是如何从内部停止主流程呢?

python cherrypy

0
推荐指数
1
解决办法
3539
查看次数

安装和启动CherryPy服务器脚本作为Windows服务(使用sc.exe)

我正在尝试安装并启动一个简单的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从脚本创建一个.

我发现 …

python windows-services mod-wsgi wsgi cherrypy

0
推荐指数
1
解决办法
3916
查看次数

$ post和Cherrypy

我目前正在开发一个我们之前使用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)

python jquery cherrypy

0
推荐指数
1
解决办法
1948
查看次数