标签: wsgi

Django vs其他Python Web框架?

我已经尝试了所有存在的Python Web框架,我花了很长时间才意识到没有一个银弹框架,每个框架都有自己的优点和缺点.我开始使用Snakelets并且非常高兴能够在较低的水平上控制几乎所有东西而不用大惊小怪,但后来我发现了TurboGears并且我一直在使用它(1.x).像Catwalk和Web控制台这样的工具对我来说非常宝贵.

但是随着TurboGears 2的出现带来了WSGI的支持,在阅读了Django和WSGI阵营之间的宗教辩论之后,我真的在"以正确的方式做到"之间徘徊,例如,学习WSGI,花费宝贵的时间来编写功能已经存在于Django和其他全栈框架中,而不是使用Django或一些为我做任何事情的高级框架.我能看到的后者的缺点非常明显:

  1. 我在这个过程中没有学到任何东西
  2. 如果我需要做任何更低级别的事情,那将是一种痛苦
  3. 仅使用身份验证的基本站点所需的开销是疯狂的.(IMO)

所以,我想我的问题是,这是更好的选择,还是仅仅是一个意见问题,如果它以最小的麻烦实现我想要的东西(我希望身份验证和CRUD接口,我应该使用Django)我的数据库)?我尝试过Werkzeug,Glashammer和朋友,但AuthKit和Repoze让我害怕,以及设置基本身份验证所涉及的步骤数量.我查看了Pylons,但文档似乎缺乏,并且在引用诸如身份验证或CRUD界面之类的简单功能时,各种wiki页面和文档似乎相互矛盾,对于版本等具有不同的hacks.


感谢S. Lott指出我不够清楚.我的问题是:从长远来看,下列哪一项是值得的,但在短期内并不痛苦(例如某种中间地带,任何人?) - 学习WSGI,或坚持使用"电池包含"框架?如果是后者,我会赞赏一个关于我是否应该再给Django一次尝试,坚持使用TurboGears 1.x,或冒险进入其他框架的建议.

此外,我尝试过CherryPy,但似乎找不到足够好的CRUD应用程序,我可以立即使用它.

python django wsgi web-frameworks turbogears

60
推荐指数
6
解决办法
3万
查看次数

一起使用Flask和Tornado?

我是Flask的忠实粉丝- 部分原因是因为它很简单,部分原因是因为它有很多扩展.但是,Flask意味着在WSGI环境中使用,而WSGI不是非阻塞的,所以(我相信)它不像某些类型的应用程序那样扩展到Tornado.

由于每个人都有一个URL调度程序,它将调用一个函数,并且两个都将使用Python文件(在Django中你不启动python文件,但是你在烧瓶或龙卷风中)你是否有意义在你的网站上有两个独立的部分 - 一部分用Tornado运行非阻塞作业,另一部分用Flask编写?

如果这是一个好主意,您将如何在Flask和Tornado之间共享cookie /会话?我会遇到问题,因为Flask将使用它自己的系统,而Tornado将使用自己的系统吗?

python wsgi tornado nonblocking flask

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

如何判断我的Django应用程序是否在开发服务器上运行?

我怎样才能确定我的应用程序是否在开发服务器上运行?我想,我可以检查的价值settings.DEBUG,并假设如果DEBUGTrue那么它的开发服务器上运行,但我更愿意知道肯定不是依靠惯例.

python django wsgi

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

如何修改Procfile以在Heroku上的非标准文件夹中运行Gunicorn进程?

我是heroku和gunicorn的新手,所以我不确定这是如何工作的.但我已经做了一些搜索,我认为我已接近部署我的Django应用程序(1.5.1).所以我知道我需要一个具有的Procfile

web: gunicorn app.wsgi
Run Code Online (Sandbox Code Playgroud)

因为我的目录有点不同.我无法在根目录中运行gunicorn

app_project
    requirements/
    contributors/
    app/
        app/
            settings/
            wsgi.py
        # Normally Procfile goes here
    Procfile
Run Code Online (Sandbox Code Playgroud)

通常app /将是根目录,但我决定以这种方式构建我的文件夹以将我的django应用程序与其他一些东西分开.由于我必须将Procfile放在根目录中以便heroku识别它,我应该在Procfile中放入什么和/或我应该在gunicorn命令中放置什么参数?

注意:

web: gunicorn app.wsgi # won't work because Procfile is in a directory above
                       # I also want to keep the directories as is
                       # I also don't want to create a secondary git inside the app folder just for heroku
web: gunicorn app.app.wsgi # won't work because I don't want to convert the folder into a python module
Run Code Online (Sandbox Code Playgroud)

python django wsgi heroku gunicorn

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

目标WSGI脚本无法作为Python模块加载

我正在尝试使用apache部署mod_wsgi来运行django应用程序但是我收到错误500内部服务器错误apache日志显示:

[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64] mod_wsgi (pid=16142): Exception occurred processing WSGI script '/home/user/bms/apache/django.wsgi'.
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64] Traceback (most recent call last):
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64]   File "/home/user/bms/apache/django.wsgi", line 13, in <module>
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64]     import django.core.handlers.wsgi
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64] ImportError: No module named django.core.handlers.wsgi
Run Code Online (Sandbox Code Playgroud)

我的apache虚拟主机如下:

<VirtualHost *:80>

    DocumentRoot /home/user/bms

    <Directory /home/user/bms>
        Order allow,deny
        Allow from all
    </Directory> …
Run Code Online (Sandbox Code Playgroud)

python apache django mod-wsgi wsgi

48
推荐指数
5
解决办法
11万
查看次数

如何使用浮点过滤器在小数点后只显示两位数?

我使用Flask/Jinja2模板使用| float过滤器显示数字.

这是我的代码

{% set proc_err = nb_err|length / sum * 100 %}
({{proc_err|float}}%)
Run Code Online (Sandbox Code Playgroud)

输出有点尴尬:

17/189 (8.99470899471%)
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法,使点后的地方限制为数字,例如2.

期望的输出:

17/189 (8.99%)
Run Code Online (Sandbox Code Playgroud)

wsgi jinja2 flask

48
推荐指数
3
解决办法
4万
查看次数

带有WSGI的Apache2上的SSL

我正在尝试在我维护的Django站点上设置SSL,并且在使用SSL设置我的VirtualHost时遇到一些麻烦.我按照这里的说明操作,但每次尝试重新启动apache时,都会告诉我由于多个虚拟主机使用相同的wsgi配置而无法重启:

/etc/init.d/apache2 reload
Syntax error on line 33 of /etc/apache2/sites-enabled/www.mydomain.com:
Name duplicates previous WSGI daemon definition.
...fail!
Run Code Online (Sandbox Code Playgroud)

我理解发生了什么,而不是如何解决它.任何建议表示赞赏,谢谢!这是我的VirutalHosts文件的样子:

<VirtualHost *:80>
    ServerAdmin my@email.com
    ServerName mydomain.com
    ServerAlias www.mydomain.com
    DocumentRoot /sites/mydomain

    # WSGI Settings
    WSGIScriptAlias / /sites/mydomain/wsgi_handler.py
    WSGIDaemonProcess mydomain user=myuser group=mygroup processes=1 threads=1
    WSGIProcessGroup mydomain

    # Static Directories
    Alias /static /sites/mydomain/static/
    <Location "/static">
            SetHandler None
    </Location>

    Alias /img /sites/mydomain/img/
    <Location "/img">
            SetHandler None
    </Location>

</VirtualHost>

<VirtualHost *:443>
    ServerAdmin my@email.com
    ServerName mydomain.com
    ServerAlias www.mydomain.com
    DocumentRoot /sites/mydomain

    # WSGI Settings
    WSGIScriptAlias …
Run Code Online (Sandbox Code Playgroud)

ssl wsgi apache2

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

一个虚拟主机上的多个mod_wsgi应用程序指向错误的应用程序

我正在尝试在同一域下的子目录中设置两个(或更多)Django应用程序,例如:

http://example.com/site1/
http://example.com/site2/
Run Code Online (Sandbox Code Playgroud)

我知道通常这可以通过设置这样的apache虚拟主机来正常工作:

<VirtualHost *:80>
    ...
    WSGIScriptAlias /site1 /path/to/site1.wsgi
    WSGIScriptAlias /site2 /path/to/site2.wsgi
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

现在,我已经确认每个网站都是单独运作的.但是当我尝试并排运行时,apache会将我发送到工作进程首先加载的任何站点.例:

  1. 重启apache配置为服务6个线程
  2. 加载example.com/site1/,获取正确的页面
  3. 加载example.com/site2/,获取正确的页面
  4. 重复2次和3次2次.
  5. 重复刷新example.com/site1/,观察它从站点到站点的循环.

实际上,对于任何给定数量的工作进程,无论WSGIScriptAlias指令如何,它都会循环执行将请求发送到其首先命中的总数.无论我做什么(设置WSGIProcessGroup,守护进程模式与嵌入模式或指令),它都会继续表现出这种行为.

如果有人能指出我在这里做错了什么,那就太惊人了!

python apache mod-wsgi wsgi apache2

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

您如何部署WSGI应用程序?(以及为什么这是最好的方式)

部署WSGI应用程序.有很多方法可以给这只猫上皮.我目前正在使用mod-wsgi的apache2,但我可以看到一些潜在的问题.

那怎么办呢?

  1. Apache Mod-wsgi(其他mod-wsgi似乎不值得)
  2. 纯Python Web服务器,例如paste,cherrypy,Spawning,Twisted.web
  3. as 2但是使用来自nginx,apache2等的反向代理,具有良好的静态文件处理能力
  4. 转换为其他协议,例如带有网桥(例如Flup)的FCGI,并在传统的Web服务器中运行.

更多?

我想知道你是怎么做的,以及为什么这是最好的方法.我绝对会你,向我提供有关最新情况和具体应用的详细信息等等.我会赞成任何非疯狂的答案.

python deployment wsgi

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

Werkzeug究竟是什么?

官方文件说:

Werkzeug是一个用于Python的WSGI实用程序库.

但是,当我运行我的Flask Web应用程序时,我注意到在服务器的响应头中,显示了

HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 13
Server: Werkzeug/0.11.9 Python/2.7.10
Date: Tue, 03 May 2016 12:50:08 GMT
Run Code Online (Sandbox Code Playgroud)

在第四行它说服务器是Werkzeug.

为什么这不是Werkzeug一个像Web服务器那样的意思Apache

wsgi werkzeug flask server

42
推荐指数
4
解决办法
3万
查看次数