介绍
我对localeURL用法有疑问.对于我来说,一切都很棒,如下所示:http: //www.example.com/
如果我在地址栏中键入 http://www.example.com/,则会在http://www.example.com/ en /中正确转到.
如果我使用视图change_locale,它也可以(即更改www.example.com/ en/in www.example.com/ fr /).
问题
但我的应用程序使用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) 我想有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?
我在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应用程序,我在文档中发现建议使用WSGI appoach来做到这一点.
在部署之前我想知道,为什么建议使用其他两种方法,即使用mod_python和fastcgi ...
非常感谢.
我目前很难将环境变量传递给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) 我试图在Apache(prefork)中使用WSGI运行Python应用程序,以便使用单个Python解释器.这是必要的,因为应用程序使用线程同步来防止发生竞争条件.由于Apache prefork产生了多个进程,因此代码最终不会在解释器之间共享,因此线程同步是无关紧要的(即每个线程只看到它自己的锁,这与其他进程没有关系).
这是设置:
以下是相关的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)
这是我到目前为止所尝试的(没有一个工作):
在虚拟主机中指定WSGIDaemonProcess和WSGIProcessGroup:
WSGIDaemonProcess osvm threads = 50
WSGIProcessGroup osvm
有没有办法强制Apache prefork使用WSGI的单个Python解释器?这些文档似乎暗示您可以使用WSGIDaemonProcess和WSGIApplicationGroup选项,但Apache仍然为每个进程创建一个单独的Python解释器.
有人可以给我一个指针,说明为什么我需要将我的项目根路径添加到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) 我正在用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?有任何想法吗?
非常感谢。
我计划使用HTTP / 2协议部署django项目,但是我找不到正确的方法来使用HTTP / 2来为基于django的网站提供服务器,我发现的唯一东西是hyper-h2。
我阅读了文档,但无法设置连接。如果有人知道如何在HTTP / 2上处理django。
我正在尝试为我的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) django-wsgi ×10
django ×9
mod-wsgi ×3
python ×3
wsgi ×3
gunicorn ×2
apache ×1
apache2 ×1
django-tests ×1
django-urls ×1
django-views ×1
gzip ×1
heroku ×1
http2 ×1
orm ×1
python-3.x ×1
tornado ×1