Win10服务器IIS上部署项目(Vue前端 + Python-Django后端整合)

     阅读:26

部署方式

最初打算将Django项目部署到Nginx服务器,此部署除了需要Nginx服务器外,还需要一个和Nginx服务器进行通信的协议软件-----uwsgi。

可是,经过尝试,最终没能成功将uwsgi安装在win10服务器上,搜到关于uwsgi教程都是在linux上的部署。服务器都是win10,所以最终选择部署在IIS上。

Django+Vue的项目,实际部署的时候有两种方法:

1.在Django上集成vue,也就是在settings.py配置templates目录到vue的dist目录,这样可以实现在Django的服务上直接调取vue前端,后端api还是使用Django的。

2.Django自己启服务,只提供API,vue自己启动服务,只提供前端。比如Django部署在IIS,Vue前端部署在nginx上,然后通过代理访问后端。

刚开始采用第二种方法,最后前后端代理死活调不通,最后采用了第一种方法。

部署的前提是前后端分别能够各自运行且请求正常。

具体的实现步骤参考大佬的文章:

https://blog.csdn.net/weixin_44697492/article/details/117734558

https://blog.csdn.net/m0_38051293/article/details/102470224

本项目主要参考第一个教程

踩坑环节:

1.FastCGI添加环境变量的时候,DJANGO_SETTINGS_MODULE路径是settings.py文件的路径,笔者的路径是settings文件夹下的dev.py文件,所以路径是第三行。后端根目录下的web.config文件中路径保持一致。


Name: DJANGO_SETTINGS_MODULE

Value:drf_admin.settings(drf_admin是自己的项目名称)

Value:drf_admin.settings.dev     

本项目根目录下web.config文件配置如下:


<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appSettings>
      <add key="WSGI_HANDLER" value="django.core.wsgi.get_wsgi_application()" />
      <add key="PYTHONPATH" value="%ROOTDIR%" />
      <add key="DJANGO_SETTINGS_MODULE" value="drf_admin.settings.dev" />
    </appSettings>
    <system.webServer>
        <handlers>
			<remove name="DjangoFastCgiModule" />
            <add name="DjangoFastCgiModule" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:\Python37\python.exe|E:\drf_admin-master\wfastcgi.py" resourceType="Unspecified" />
        </handlers>
        <directoryBrowse enabled="true" />
		<modules runAllManagedModulesForAllRequests="true">  
		  <remove name="WebDAVModule" />  
		</modules> 
    </system.webServer>
</configuration>

2.settings/dev.py配置:


DEBUG = False

ALLOWED_HOSTS = ['*']

STATIC_ROOT = 'E:\drf_admin-master\static'      # 后端静态文件路径

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "E:\\drf_admin-master\\frontend\\dist\\static\\"),
]                                               # 前端静态文件路径

3.前后端其实都是在各自的服务器上的,Django在127.0.0.1:8000上,Vue在127.0.0.1:8080上,我们需要把他们放到一起,此时就需要用到Django的TemplateView,将其指向我们刚才生成的前端工程frontend下的dist文件即可。
找到内层drf_admin文件夹下的urls.py,修改代码如下:


from django.views.generic import TemplateView

path('', TemplateView.as_view(template_name="index.html")),

由于我们使用了Django的模板系统,所以需要配置一下模板使Django知道从哪里找到index.html。在 内层drf_admin文件夹下的settings/dev.py下,修改代码如下:


TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': ['E:\\drf_admin-master\\frontend\\dist\\'],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

4.接口中查询是GET请求,新增是POST请求,而修改是PUT请求,删除是DELETE请求,IIS服务通常都是支持get和post请求的,由此分析推断很有可能是IIS不支持put和delete谓词请求。

解决方案(针对当前网站,去除WebDav 模块):
修改根目录下web.config文件,在system.webServer标签中添加:


<modules runAllManagedModulesForAllRequests="true">  
	 <remove name="WebDAVModule" />  
</modules>