设为首页 收藏本站
查看: 1022|回复: 0

[经验分享] 在Windows平台下的IIS中发布Django应用

[复制链接]

尚未签到

发表于 2015-8-13 08:08:05 | 显示全部楼层 |阅读模式
目标
  在Windows平台上的IIS服务器中发布由Django创建的应用。在我们开始之前请确保你已经安装完毕Windows,IIS,并能正常运行,需要发布的Django应用也已在内置的测试服务器上调试通过。
  注意:本指南对Django <=0.91无效,因为IIS扩展基于Django >=0.92的API
  

步骤


  • 安装PyISAPIe - 一个让IIS支持Python的扩展
  • 安装Django并通过PyISAPIe连接Django
  • 配置Django
  • 测试

安装PyISAPIe - 一个IIS的ISAPI扩展
  PyISAPIe不是以安装包的形式发布的,不过安装起来也并不复杂
  简单地说,这个扩展在IIS运行时将Python解释器加载到内存中并用它来响应页面请求,它避免了CGI方式下为每一个请求反复启动Python。这意味着某些Django文件会被缓存,在你修改代码后不能马上起效,直到你重启Python进程。对于IIS 6你必须右键点击应用程序池中的服务然后选择&#8221;刷新&#8221;来让更改有效,对于更早的IIS版本你也许需要重新启动整个IIS服务。
  好,那我们先访问http://pyisapie.sourceforge.net/并下载最新的PyISAPIe。
  假设你将所有的文件解压到c:\pyisapie,并且将Python安装在c:\python24,如果路径不同,请作相应的调整。
  在readme中有文档说明,步骤概括如下:

安装文件


  • 将 c:\pyisapie\PyISAPIe.dll 复制到 c:\python24\
  • 编辑该文件的&#8220;属性&#8221;->&#8220;安全设置&#8221;,加入&#8220;Network&#8221;,&#8220; Service&#8221;,并选中&#8220;读取&#8221;权限。(为了让IIS可以访问)
  • 转到 c:\pyisapie\source\PyISAPIe\Python\ 将整个Http文件夹复制到 c:\python24\lib\site-packages。 注意:Http文件夹的名字是大小写敏感的,千万别误存为http或其他变体,那样将无法正常运行。

设置IIS
  你不一定要创建虚拟目录——可以直接使用根目录。如果你使用虚拟目录,比如/myfolder,那么只有以/myfolder开头的页面由PyISAPIe处理。如果你使用根目录,所有的URL都将由PyISAPIe处理,这可能会导致你站点上的其他内容无法访问。 * 打开IIS管理控制台,创建新的虚拟目录,并在向导提示的时候允许ISAPI扩展。

IIS 6


  • 察看虚拟目录的属性并点击&#8220;配置&#8221;(如果这个选项为灰色,则先点击&#8220;创建&#8221;),然后加入一个新通配符(下方的列表框内),定位到 pyisapie.dll 文件,清除&#8220;检查文件是否存在&#8221;选项。
  • 在IIS管理器中,到&#8220;网络服务扩展&#8221;区右键点击->加入新的网络服务扩展。
  • 随便取一个名字,然后将pyisapie.dll添加为所需文件,并选中允许此扩展

IIS 5


  • IIS 5.x 不支持通配符应用映射,至少在配置界面下不支持。在IIS 5下,实施步骤如下:
  • 右键点击虚拟目录并选择&#8220;属性&#8221;
  • 确保&#8220;执行许可&#8221;设置为&#8220;脚本和可执行程序&#8221;
  • 点击&#8220;配置&#8221;(在&#8220;脚本和可执性程序&#8221;旁)
  • 点击&#8220;应用程序映射&#8221;标签,选择&#8220;添加&#8221;
  • 设置&#8220;可执行文件&#8221;为 c:\python24\PyISAPIe.dll
  • 设置&#8220;扩展名&#8221;为&#8220;*&#8221;,这样所有的请求都通过PyISAPIe.dll处理
  • 你应该限定所允许的动作,但是为了内部测试方便,我们暂时设置为&#8220;全部动作&#8221;
  • 清除&#8220;检查文件是否存在&#8221;的选项
  • 点击&#8220;确定&#8221;关掉所有窗口
  设置好之后,你可以将 c:\pyisapie\source\PyISAPIe\Python\examples 下的Info.py复制到你新建的虚拟目录中,然后访问http://site/Info.py来测试。

将Django连接到PyISAPIe
  按照PyISAPIe的examples\django目录下的readme.txt来设置Django。简要的说就是将两个文件复制到相应的文件夹中。然后稍加修改以满足你的需要。


  • 将 Isapi.py 放到 c:\python24\lib\site-packages\Http 目录。按照前面给的例子,你需要对此文件稍加修改:
  改动的代码

# 加入下列两行,这样python可以导入 DJANGO_SETTINGS_MODULE
import sys
sys.path.append(r'c:\test')
# Indicate the settings module of your project
os.environ["DJANGO_SETTINGS_MODULE"] = "proj.settings"


  • 将 pyisapie.py 放到 c:\python24\lib\site-packages\Django-xyz-123.egg\django\core\handlers 目录。PyISAPIe v1.0.3中有个小bug。 你需要对它稍加修改才能正常使用。
  改动的代码

class PyISAPIeRequest(http.HttpRequest):
def __init__(This):
# 加入下一行
This.method = Env.REQUEST_METHOD
# 其他的不必修改


  • IIS+Python+PyISAPIe目前好像并不支持多个Django站点。

修改Django设置
  做完上述几步之后,我们可以将虚拟目录 /myfolder 指向 c:\test,然后创建一个Hello World 页面来进行测试。


  • 在 c:\test\proj 目录中创建一个 helloworld.py 文件
  内容如下

from django.http import HttpResponse
def index(request):
return HttpResponse("Hello world!")


  • 修改 c:\test\proj 目录下的 urls.py
  内容如下

from django.conf.urls.defaults import *
urlpatterns = patterns('',
# Example:
# (r'^newtest/', include('proj.apps.foo.urls.foo')),
(r'^.*$', 'proj.helloworld.index'),
# Uncomment this for admin:
#     (r'^admin/', include('django.contrib.admin.urls')),
)

  一切准备就绪,你可以马上访问 http://site/myfolder 来看一下效果。请注意,你不需要手动启动Django服务。

常见问题


  •   在 IIS 5 上,每一次修改代码后,你需要在控制台下用命令 &#8220;iisreset&#8221; 重启IIS才能让它生效。直接在&#8221;IIS 管理控制台&#8221;下重新启动站点是没有效果的,一定要重启整个IIS服务。
  •   最好在根目录下创建一个 &#8220;media&#8221; 虚拟目录来提供样式表等静态内容。


原文参考


  • DjangoOnWindowsWithIISAndSQLServer

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-98168-1-1.html 上篇帖子: 如何将 .net2.0注册到IIS ,重新注册IIS 下篇帖子: 一个IIS进程无法启动的问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表