使用mod_wsgi运行Django教程示例?

3 投票
1 回答
6743 浏览
提问于 2025-04-16 07:31

我安装了wsgi(mod_wsgi),并且可以通过访问http://localhost/myapp来运行一个简单的应用。

WSGIScriptAlias /myapp /Library/WebServer/Documents/wsgi/scripts/myapp.wsgi
def application(environ, start_response):
    status = '200 OK'
    output = 'Hello World! WSGI working perfectly!'

    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]

我该怎么运行Django的示例呢?

我找到了一些简单的示例,具体可以参考这个链接

import os
import sys

os.environ['DJANGO_SETTINGS_MODULE'] = 'my.settings' # ???

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
mysite/
    __init__.py
    manage.py
    settings.py
    urls.py

Django生成了三个Python文件,其中有一个settings.py文件,里面包含了一些设置的信息。这个项目在'/ABC/DEF/mysite'这个目录下。

我对代码做了一些修改,并把它命名为myapp.wsgi。

import os
import sys

sys.path.append('/ABC/DEF/mysite') 
sys.path.append('/ABC/DEF')
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

虽然我可以通过这个教程使用“python manage.py runserver 8080”来运行原始的Django示例,但在用mod_wsgi运行修改后的示例时却出现了错误。

apache2的日志文件里有以下内容。

[Wed Nov 24 09:02:41 2010] [error] [client 127.0.0.1] ImportError: Could not import settings 'mysite.settings' (Is it on sys.path? Does it have syntax errors?): No module named mysite.settings

据我所知,目录/项目的名字是mysite,并且它有settings.py文件。而且这个目录在sys.path中。所以,我不知道为什么找不到mysite.settings。

我的myapp.wsgi文件有什么问题呢?

解决方案

以下代码运行得很好。还有一点我修改的是,Django项目不应该放在我的主目录下,当我把项目移动到www文档目录时,一切都正常了。

import os
import sys

mysite = 'SOMEWEHRE/django'
if mysite not in sys.path:sys.path.insert(0,mysite)
mysite = 'SOMEWEHRE/scripts'
if mysite not in sys.path:sys.path.insert(0,mysite)

os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

1 个回答

2

你需要做的是把项目的目录或者项目所在的目录添加到 sys.path 中,然后如果你选择了后者,就把设置指向 mysite.settings

编辑:

“Django 设置”

编辑 2:

如何设置 Django 的设置模块

编辑 3:

设置模块应该是模块名,而不是文件名。如果是 'settings',那么你就不需要再设置了。

撰写回答