Windows下Djang+Wsgi+Apache配置,各种该相关配置问题的终极解决方案

Djang+Wsgi+Apache Config on Windows

之前写了一篇 Django+Mod_Python+Apache的配置文章(http://blog.youkuaiyun.com/l_courser/article/details/6818606)。

毕竟,Mod_Python是即将被淘汰的玩意儿,Wsgi才是最新的“王道”,结合网上一些配置,我整理了一下,并亲测成功,发出来供大家参考。

如有其它疑问,请随时留言。欢迎转载,转载时请注明出处,谢谢!


准备以下内容:

  • Python26+,此处我用的是 Python27,Python3+版本未使用过,听说有很多不同,以后用到的时候再研究;
  • 下载合适的Wsgi版本,此处我使用的是:mod_wsgi-win32-ap22py27-3.3.so,为了使用方便将其改名为:mod_wsgi.so;
  • 该文件下载地址:http://modwsgi.googlecode.com/files/mod_wsgi-win32-ap22py27-3.3.so
  • Django使用的是此时间点最新的1.3.1
  • Apache2.2.* ;
以上内容,在我的网盘均有下载,网盘这东东没整明白,以后再把详细下载地址放上来:http://www.dbank.com/netdisk/index.html?v=2.3.5#/我的网盘

东东都准备完成了,开始各种安装,一般的不说了,说说wsgi吧。将下载的文件拷贝到 Apache安装目录的 moudles 下面。
整个安装完成了。
配置
  • Django配置
  • 安装完成后,将Django的bin目录最好放在系统的环境的PATH中,命令行进入D:/website,执行django-admin.py startproject myweb
  • Apache配置
  • 在 httpd.conf 合适的地方加上:LoadModule wsgi_module modules/mod_wsgi.so;
  • 最后加上:Include "D:/website/apache_django_wsgi.conf";("D:/website”为你的网站根目录);
  • 在 D:/website中建立以下两个文件:django.wsgi和apache_django_wsgi.conf,文件内容如下:
  • apache_django_wsgi.conf
  • Alias /static/admin/ "D:/website/myweb/static/admin/"
    <Directory "D:/website/myweb/static/admin">
    	Order allow,deny
    	Options Indexes
    	Allow from all
    </Directory>
     
    WSGIScriptAlias / "D:/website/django.wsgi"
     
    <Directory "D:/website/myweb">
    	Allow from all
    </Directory>
    
    <Directory "d:/website"> 
    	Allow from all
    </Directory>
    
    #for testing wsgi
    #WSGIScriptAlias / "d:/Djangoweb/test.wsgi"  

    django.wsgi内容如下
  • import os, sys
    #Calculate the path based on the location of the WSGI script.
    apache_configuration= os.path.dirname(__file__)
    project = os.path.dirname(apache_configuration)
    workspace = os.path.dirname(project)
    
    #
    os.chdir('D:/website/myweb')     #注意这句话,之前我没有加这句话,导致无法找到项目路径
    sys.stdout = sys.stderr		#将日志输出到apache下的error.log便于发现问题
    sys.path.append(workspace)
    
    #print workspace 
    sys.path.append(workspace + "website")
    os.environ['DJANGO_SETTINGS_MODULE'] = 'myweb.settings'
    import django.core.handlers.wsgi
    application = django.core.handlers.wsgi.WSGIHandler()

    apache_django_wsgi.conf文件的内容中,最后一行注释的test.wsgi文件内容如下:
  • def application(environ, start_response):
    	status = '200 OK'
    	output = 'Hello World!'
    
    	response_headers = [('Content-type', 'text/plain'),('Content-Length', str(len(output)))]
    	start_response(status, response_headers)
    
    	return [output]
    该文件用来测试wsgi是否配置成功用的,测试的时候,取消apache_django_wsgi.conf中以下注释:#WSGIScriptAlias / "d:/Djangoweb/test.wsgi" 并将WSGIScriptAlias / "D:/website/django.wsgi"加上注释。测试结果如果显示 Hello World!,则成功,否则失败,请挥剑自宫^_^在整个安装、配置、测试的过程中,多关注 error.log,对无法解决的问题,多google,百度就算了,基本搜不到你想要的,可以这么说,搞程序开发的,如果用百度,我可以认为你不专业,呵呵,扯远了。这方面的问题,以后多多交流。
<think>我们正在解决Django服务器运行时未显示更新内容的问题。根据用户描述,在PyCharm中修改代码后,Django服务器没有更新,可能是缓存问题。常见的解决方案包括:1.清除Django的缓存。2.重启Django服务器。3.确保PyCharm正确保存了文件。4.检查Django的DEBUG模式是否开启,以便自动重新加载。5.检查是否有前端缓存(如浏览器缓存)导致的问题。另外,根据引用[1]中提到的配置,我们还需要注意静态文件(static)的配置,但用户当前问题要是代码更新不显示,所以可能不是静态文件的问题,但也不能完全排除。步骤:1.首先,确保修改后已经保存文件(在PyCharm中按Ctrl+S或自动保存)。2.检查Django服务器是否运行在自动重载模式下(DEBUG=True时默认开启)。当代码改变时,Django开发服务器会自动重启。但有时可能会失败。3.尝试手动重启服务器。4.清除Django的缓存:可以使用Django的缓存清理命令,或者如果使用了缓存中间件,可以清空缓存。5.清除浏览器的缓存,或者尝试在浏览器中使用无痕模式查看。6.如果修改的是模板文件,确保模板目录配置正确,并且Django设置了模板自动重新加载(在settings.py中设置TEMPLATES中的APP_DIRS为True,并且OPTIONS中的'debug'为True,但注意在Django1.8之后,自动重新加载由DEBUG控制,不需要单独设置模板重载)。7.如果修改的是静态文件,需要运行collectstatic命令(如果使用了静态文件收集),或者检查静态文件的URL配置和版本控制(如添加版本号)。另外,根据引用[2]中提到的问题,可能是由于PyCharm的配置问题(比如根目录设置)导致服务器没有正确加载修改后的代码。确保PyCharm的项目根目录设置正确,并且Django服务器运行的是当前项目目录下的代码。如果以上方法都不行,可以尝试以下步骤:8.清除.pyc文件:有时候旧的.pyc文件会导致问题,可以删除项目中的所有.pyc文件(在项目根目录运行命令:`find.-name"*.pyc"-execrm-f{}\;`(Linux/Mac)或者手动删除(Windows))。9.检查Django的中间件是否有缓存中间件(如'django.middleware.cache.UpdateCacheMiddleware'和'django.middleware.cache.FetchFromCacheMiddleware'),如果有,尝试暂时禁用。针对用户的问题,我们给出具体操作步骤:解决方案:步骤1:检查并确保Django的DEBUG模式开启在settings.py中,确保:DEBUG=True步骤2:重启Django服务器在PyCharm中停止服务器,然后重新启动。步骤3:清除浏览器缓存或使用无痕模式或者强制刷新(Ctrl+F5)。步骤4:清除Django的缓存如果项目使用了缓存,可以尝试清除缓存:fromdjango.core.cacheimportcachecache.clear()或者如果使用文件系统缓存,可以删除缓存目录。步骤5:删除所有.pyc文件在项目根目录下执行(对于Windows用户,可以使用以下方法):-在PyCharm的终端中运行:`pythonmanage.pyclean_pyc`(需要先编写一个自定义命令,或者手动删除)-或者手动删除:在项目文件夹中搜索`.pyc`文件并删除。步骤6:检查模板自动重载在settings.py的TEMPLATES设置中,确保:'OPTIONS':{'debug':DEBUG,#一般与DEBUG相同#...其他选项}并且确保没有使用缓存模板加载器(如'django.template.loaders.cached.Loader')。步骤7:检查静态文件如果修改的是静态文件(如CSS、JS),请确保:-运行了`pythonmanage.pycollectstatic`(如果使用STATIC_ROOT)-在开发阶段,通常不需要collectstatic,因为Django会直接从app的static目录提供。但确保STATIC_URL和STATICFILES_DIRS设置正确。-在HTML中引用静态文件时使用`{%static'path/to/file.css'%}`,并确保在模板中加载了static标签。步骤8:检查中间件检查settings.py中的MIDDLEWARE设置,暂时注释掉缓存相关的中间件。步骤9:检查PyCharm的部署配置确保PyCharm没有将代码部署到远程服务器(如果是本地运行的话),并且运行配置中的“Workingdirectory”和“Pythoninterpreter”设置正确。步骤10:确保文件保存在PyCharm中,检查文件是否保存:文件标签页上是否有星号(表示未保存)?确保保存。如果以上步骤都不能解决问题,可能需要检查Django的版本,以及PyCharm的版本,看是否有已知问题。根据引用[1]中的配置,用户使用了mod_wsgiApache),但用户当前问题是在开发服务器(runserver)上还是部署在Apache上?用户提到“Django服务器运行后”,如果用户使用的是Apache+mod_wsgi,那么修改代码后需要重启Apache才能生效。但是用户提到在PyCharm中修改,所以可能是开发服务器。需要用户明确,但这里用户没有说明,我们先假设是开发服务器。如果用户使用的是生产服务器(如Apache),那么每次修改代码都需要重启Apache服务(在Windows下可以在服务中重启,或者使用命令`netstopApache2.4`和`netstartApache2.4`,具体服务名可能不同)。考虑到用户问题描述为“pycharm修改无效”,很可能是在开发环境中使用开发服务器(runserver)。所以我们的解决方案要针对开发服务器。最后,如果问题依然存在,可以尝试在命令行中直接运行`pythonmanage.pyrunserver`,而不是通过PyCharm运行,以排除PyCharm的问题。生成相关问题:1.如何配置Django的自动重载?2.如何清除Django的缓存?3.如何删除项目中的所有.pyc文件?4.如何配置PyCharm的Django服务器运行参数?5.如何解决静态文件更新不显示的问题?</think>### Django服务器未显示更新内容的解决方案使用PyCharm开发Django项目时,服务器未显示更新内容通常是由缓存、自动重载机制或配置问题导致的。以下是系统化的解决方案: #### 1. **强制刷新Django开发服务器** - **手动重启服务器**:在PyCharm中停止并重新运行`runserver`命令。 - **自动重载检查**:确保`settings.py`中`DEBUG = True`(默认开启自动重载)[^1]。 - **触发重载**:修改`settings.py`或`urls.py`等核心文件可强制服务器重启。 #### 2. **清除缓存机制** ```python # 在Django shell中执行缓存清理 from django.core.cache import cache cache.clear() ``` - 禁用中间件缓存:在`settings.py`中注释掉缓存中间件: ```python # 'django.middleware.cache.UpdateCacheMiddleware', # 'django.middleware.cache.FetchFromCacheMiddleware', ``` #### 3. **处理.pyc字节码缓存** - 删除所有编译缓存文件: ```bash find . -name "*.pyc" -delete # Linux/Mac del /S *.pyc # Windows ``` - 在PyCharm中:`File > Invalidate Caches > Invalidate and Restart`[^2]。 #### 4. **静态文件更新问题** - 开发阶段:确保`settings.py`中: ```python STATICFILES_DIRS = [BASE_DIR / "static"] # 指向源静态文件夹 ``` - 生产环境:运行`python manage.py collectstatic`重新收集静态文件。 - 浏览器端:按`Ctrl+F5`强制刷新或禁用浏览器缓存。 #### 5. **模板文件更新** - 确保`settings.py`中模板配置开启调试: ```python TEMPLATES = [{ 'OPTIONS': {'debug': DEBUG}, # 与DEBUG值同步 }] ``` - 检查模板路径:`DIRS`应包含模板目录(如`[BASE_DIR / 'templates']`)。 #### 6. **PyCharm特定问题处理** - **工作目录验证**:检查运行配置(`Run > Edit Configurations`),确保`Working Directory`是项目根目录。 - **虚拟环境同步**:确认PyCharm使用解释器与项目虚拟环境一致(`File > Settings > Project Interpreter`)[^2]。 - **文件监控**:启用`Settings > Advanced Settings > Allow automatic reload on external changes`。 #### 7. **终极排查步骤** ```bash # 1. 清除所有缓存 rm -rf __pycache__ # 删除项目内__pycache__文件夹 python manage.py clear_cache # 需安装django-extensions # 2. 命令行启动服务器(绕过PyCharm) python manage.py runserver --noreload ``` - 若仍无效:检查`wsgi.py`是否指向正确设置模块(如`os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')`)[^1]。 --- ### 常见原因总结 | 问题类型 | 现象 | 解决方案 | |----------------|-----------------------|------------------------------| | 自动重载失效 | 代码修改后服务器无响应 | 手动重启/修改核心文件触发 | | 字节码缓存 | 旧逻辑持续运行 | 删除.pyc文件/清理PyCharm缓存 | | 静态资源缓存 | CSS/JS更新未生效 | 浏览器强制刷新/collectstatic | | 模板缓存 | HTML修改不更新 | 确保`debug=True` | | PyCharm配置 | 运行环境不一致 | 校验解释器和工作目录 | > **关键提示**:开发阶段务必保持`DEBUG=True`,并避免在生产中间件(如缓存、白噪声)干扰开发环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值