标签: django-wsgi

当WSGIScriptAlias是/ PREFIX时,Django localeURL

介绍

我对localeURL用法有疑问.对于我来说,一切都很棒,如下所示:http: //www.example.com/

问题

但我的应用程序使用apache作为服务器,使用mod_wsgi.httpd.conf脚本包含以下行:

WSGIScriptAlias /MY_PREFIX /path/to/django/app/apache/django.wsgi
Run Code Online (Sandbox Code Playgroud)

给出这样的网址:http:
//www.example.com/MY_PREFIX/

change_locale视图出现了同样的问题.我修改了这段代码以便管理这个前缀(存储在settings.SERVER_PREFIX中):

    def change_locale(request) :
    """
    Redirect to a given url while changing the locale in the path
    The url and the locale code need to be specified in the
    request parameters.
    O. Rochaix; Taken from localeURL view, and tuned to manage :            
        - SERVER_PREFIX …
Run Code Online (Sandbox Code Playgroud)

python django mod-wsgi django-urls django-wsgi

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

在Tornado Web Server上运行Django以获得async + django admin + django orm的最佳方法是什么?

我想有django管理面板与龙卷风后端,这将处理来自在线游戏的请求.我目前不知道,以下一种方式加载django app是个好主意:

wsgi_app = tornado.wsgi.WSGIContainer(
django.core.handlers.wsgi.WSGIHandler())
tornado_app = tornado.web.Application(
[
  ('/hello-tornado', HelloHandler),
  ('.*', tornado.web.FallbackHandler, dict(fallback=wsgi_app)),
])
server = tornado.httpserver.HTTPServer(tornado_app)
server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
Run Code Online (Sandbox Code Playgroud)

HelloHandler将成为后端解析器.

在组合wsgi + ioloop时我会失去一些表现吗?

如果它是一个糟糕的解决方案,它可以运行2个应用程序:django admin和tornado web.你能否回答我如何在Tornado App中使用Django ORM?

django orm tornado django-wsgi

8
推荐指数
2
解决办法
3527
查看次数

gzip没有和Whitenoise一起在Django工作

我在Heroku上部署了一个Django网站,使用Whitenoise提供静态文件.

静态文件工作正常,但Gzip不能根据我用来测试它的各种网站(包括谷歌工具)工作.

这是我的生产设置文件中的代码:

DATABASES['default'] = dj_database_url.config()


SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

ALLOWED_HOSTS = ['*']

STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'
Run Code Online (Sandbox Code Playgroud)

我的静态文件配置:

BASE_DIR = os.path.dirname(os.path.dirname(__file__))

STATIC_URL = '/static/'
STATIC_ROOT = 'staticfiles'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)
Run Code Online (Sandbox Code Playgroud)

我的wsgi.py文件

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "sikumim.settings")

application = get_wsgi_application()

#HEROKU DEPLOYMENT

from whitenoise.django import DjangoWhiteNoise
application = DjangoWhiteNoise(application)
Run Code Online (Sandbox Code Playgroud)

可能是什么原因?

我在评论中提出了一些命令,看起来像gzip不起作用:

➜~curl-I -H"Accept-Encoding:gzip" http://127.0.0.1:8000/

HTTP/1.0 200 OK
Date: Mon, 17 Aug 2015 13:56:02 GMT
Server: WSGIServer/0.2 CPython/3.4.0
X-Frame-Options: SAMEORIGIN
Vary: Cookie
Content-Type: text/html; charset=utf-8
Set-Cookie:  csrftoken=SsgKEp76HDhG5L7otWxqBJeMyb00Vp03; …
Run Code Online (Sandbox Code Playgroud)

django gzip heroku django-wsgi

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

据说部署django的最佳方法是使用wsgi,我想知道为什么?

我们正在部署django应用程序,我在文档中发现建议使用WSGI appoach来做到这一点.

在部署之前我想知道,为什么建议使用其他两种方法,即使用mod_python和fastcgi ...

非常感谢.

python django mod-wsgi wsgi django-wsgi

7
推荐指数
2
解决办法
1142
查看次数

Gunicorn环境变量设置

我目前很难将环境变量传递给Gunicorn用于我的Django项目.我正在使用最新的19.1版本.我有一个像这样的wsgi.py文件:

import os
import sys
from django.core.wsgi import get_wsgi_application

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
PROJECT_DIR = os.path.abspath(os.path.join(BASE_DIR, '..'))

sys.path.append(PROJECT_DIR)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "app.settings")

def application(environ, start_response):
    _application = get_wsgi_application()
    os.environ['SERVER_ENV'] = environ['SERVER_ENV']
    os.environ['SERVER_ID'] = environ['SERVER_ID']
    return _application(environ, start_response)
Run Code Online (Sandbox Code Playgroud)

当我从命令行运行gunicorn时:

SERVER_ENV=TEST SERVER_ID=TEST gunicorn -b 127.0.0.1:8080 --error-logfile - --access-logfile - app.wsgi:application
Run Code Online (Sandbox Code Playgroud)

然后我将请求传递给gunicorn我一直得到:

2014-08-01 08:39:17 [21462] [ERROR] Error handling request
Traceback (most recent call last):
  File "/opt/virtualenv/python-2.7.5/django-1.5.5/lib/python2.7/site-packages/gunicorn/workers/sync.py", line 93, in handle
    self.handle_request(listener, req, client, addr)
  File "/opt/virtualenv/python-2.7.5/django-1.5.5/lib/python2.7/site-packages/gunicorn/workers/sync.py", line 134, in handle_request
    respiter = self.wsgi(environ, resp.start_response)
  File "/opt/sites/itracker/wsgi.py", …
Run Code Online (Sandbox Code Playgroud)

django wsgi django-wsgi gunicorn

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

在Apache Prefork/WSGI中共享Python解释器

我试图在Apache(prefork)中使用WSGI运行Python应用程序,以便使用单个Python解释器.这是必要的,因为应用程序使用线程同步来防止发生竞争条件.由于Apache prefork产生了多个进程,因此代码最终不会在解释器之间共享,因此线程同步是无关紧要的(即每个线程只看到它自己的锁,这与其他进程没有关系).

这是设置:

  • Apache 2.0(prefork)
  • WSGI
  • Python 2.5

以下是相关的Apache配置:

WSGIApplicationGroup %{GLOBAL}
<VirtualHost _default_:80>

WSGIScriptAlias / /var/convergedsecurity/apache/osvm.wsgi

Alias /admin_media/ /var/www/html/admin_media/

<Directory /var/www/html/admin_media>
Order deny,allow
Allow from all
</Directory>

Alias /media/ /var/www/html/media/

<Directory /var/www/html/media>
Order deny,allow
Allow from all
</Directory>

</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所尝试的(没有一个工作):

  1. 添加WSGIApplicationGroup%{GLOBAL}
  2. 在虚拟主机中指定WSGIDaemonProcessWSGIProcessGroup:

    WSGIDaemonProcess osvm threads = 50
    WSGIProcessGroup osvm

有没有办法强制Apache prefork使用WSGI的单个Python解释器?这些文档似乎暗示您可以使用WSGIDaemonProcess和WSGIApplicationGroup选项,但Apache仍然为每个进程创建一个单独的Python解释器.

apache mod-wsgi wsgi apache2 django-wsgi

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

Django sys.path.append用于WSGI下的project*和*app

有人可以给我一个指针,说明为什么我需要将我的项目根路径添加到python路径以及我的WSGI文件中的应用程序本身?

项目基础称为"djapp",该应用程序称为"myapp".

sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/..')
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../djapp')

os.environ['DJANGO_SETTINGS_MODULE'] = 'djapp.settings'
Run Code Online (Sandbox Code Playgroud)

如果我省略了带有"/../djapp/"的行,则日志会告诉我'myapp'无法导入,即使'djapp.settings'是.(验证'djapp'已导入)

它可以使用./manage.py命令正常运行.__init__项目文件夹中有一个.

为了测试,我看到同样的问题使用addsitedir:

site.addsitedir('/home/user/web/project/')
site.addsitedir('/home/user/web/project/djapp')
Run Code Online (Sandbox Code Playgroud)

django django-wsgi

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

我应该使用django-gunicorn集成还是wsgi?

我正在用gunicorn + django设置Web服务器。有两种部署选项:要么使用常规WSGI,要么使用gunicorn的django-integration。我倾向于使用后者,因为它简化了配置,但是django文档说:

If you are using Django 1.4 or newer, it’s highly recommended to simply run your
application with the WSGI interface using the gunicorn command as described above.
Run Code Online (Sandbox Code Playgroud)

他们没有给出任何解释,所以我想知道为什么“强烈推荐”使用WSGI?有任何想法吗?

非常感谢。

django django-wsgi gunicorn

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

如何使用Django服务器HTTP / 2协议

我计划使用HTTP / 2协议部署django项目,但是我找不到正确的方法来使用HTTP / 2来为基于django的网站提供服务器,我发现的唯一东西是hyper-h2

我阅读了文档,但无法设置连接。如果有人知道如何在HTTP / 2上处理django。

django django-views django-wsgi python-3.x http2

6
推荐指数
2
解决办法
3368
查看次数

Django测试用例错误'WSGIRequest'对象没有属性'session'

我正在尝试为我的django应用程序编写一些测试,它会抛出一个错误:

File "/Users/croberts/.virtualenvs/litem/lib/python3.4/site-packages/django/contrib/auth/__init__.py", line 101, in login
    if SESSION_KEY in request.session:
AttributeError: 'WSGIRequest' object has no attribute 'session'
Run Code Online (Sandbox Code Playgroud)

这是我正在尝试运行的代码:

class SimpleTest(TestCase):
    def setUp(self):
        self.request_factory = RequestFactory()

    def test_signup(self):
        request = self.request_factory.post("/signup/", {
            "email": "email@email.com", 
            "password": "password", 
            "password-confirm": "password", 
            "firm": "big law firm"})
        response = signup_user(request)
        user = User.objects.get(email="email@email.com")
        self.assertEqual(user.username, "email@email.com")
        self.assertEqual(user.firm, "big law firm")
        self.assertEqual(response.status_code, 302) #if it's successful it redirects.
Run Code Online (Sandbox Code Playgroud)

这是我的中间件:

MIDDLEWARE_CLASSES = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
Run Code Online (Sandbox Code Playgroud)

和我安装的应用程序:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth', …
Run Code Online (Sandbox Code Playgroud)

python django django-wsgi django-sessions django-tests

5
推荐指数
3
解决办法
3766
查看次数