使用api子目录在开发服务器上设置Django和Webpack

上下文:

我使用Django作为后端,使用Vue / Vuetify作为单独的前端。我使用Apache服务前端,而Django仅用于客户端/服务器设置中的api调用。

我已经设置了WSGIScriptAlias来通过[base_url] / api而不是网站根目录进行服务。我部署了该项目,并且按预期从/ api提供了Django请求/响应。

在我的开发环境中,我正在运行2个并发开发服务器。我正在为前端项目运行webpack开发服务器(端口10000),在单独的端口(10001)上运行django runserver,以在开发时为我的请求提供服务。

在webpack中,我设置了以下内容:

devserver:{
        hot: true,port: 10000
        historyApiFallback: true,host: 'localhost',//django api
        proxy:{
            '/api': {
                target: 'http://localhost:10001',pathRewrite: {'^/api' : ''},secure: false
            }
        }
    }

这里的想法是,每当我从http://localhost:10000/api请求某项内容时,它将自动重定向到localhost:10001,它模仿了生产实例的工作方式,因为生产中断了请求的/ api部分。>

问题:

当我运行dev webpack和django服务器时,我可以成功请求localhost:10000 / api并获得django响应,但是我注意到当我尝试访问http://localhost:10000/api/admin时,应该调出django admin页面,Django重定向到http://localhost:10000/admin

我正在寻找WSGIScriptAlias以外的方法(因为除非在我设置了一个本地apache / virtualhost,否则我无法在我的dev实例中使用该方法,否则在修改django时会遇到刷新问题)。>

有什么办法可以做以下其中一项?

A)生产环境中没有WSGIScriptAlias / Django生产环境中删除请求的/ api部分(这将使url模式在所有环境中保持一致)

B)可能会在Django设置或运行服务器中将基本URL设置为包含/ api,以便在没有/ api的情况下不会尝试重定向

C)也许是webpack中我在devserver设置中缺少的东西?

全面披露: 还有一个问题要问类似的问题(How to set base URL in Django),但又有所不同,因为看起来好像他们在谈论生产,我在谈论开发实例。他们的解决方案还使用了我无法使用的WSGIScriptAlias。

hwzzwc 回答:使用api子目录在开发服务器上设置Django和Webpack

这不是最理想的解决方案,但是在WSGIScriptAlias末尾添加/ api似乎已经标准化了开发人员和生产人员之间的所有内容。为了避免在所有基本网址格式的前面添加“ api /”,我围绕Django.urls.path和Django.urls.re_path创建了一个包装器,该包装器在模块中利用了base_pattern变量:

/etc/apache2/sites_available/app.conf:

<VirtualHost *:443>
   ...
   WSGIScriptAlias /api /path/to/django/wsgi.py/api
   ...
</VirtualHost>

utils / urls.py:

from django.urls import path,re_path


base_pattern = ''

def base_path(broute,bview,bkwargs=None,bname=None):
    global base_pattern
    return path(route=base_pattern + broute,view=bview,kwargs=bkwargs,name=bname)

def re_base_path(broute,bname=None):
    global base_pattern
    return re_path(route=base_pattern + broute,name=bname)

现在,我只是导入utils.urls模块,并在寻找要包含的基本模式时使用它。这不是一个完美的解决方案,但可以完成工作。

引用: https://serverfault.com/questions/555955/can-i-configure-apache-mod-wsgi-so-that-the-alias-url-path-is-not-stripped-befor

本文链接:https://www.f2er.com/3127510.html

大家都在问