Python 如何在一台vhost上为django和gatsby服务?

Python 如何在一台vhost上为django和gatsby服务?,python,django,apache,gatsby,wsgi,Python,Django,Apache,Gatsby,Wsgi,我正在尝试在单个域下部署基于gatsby的前端和基于django的后端。它将依赖于Apache和mod_wsgi。在一个完美的世界中,它应该如下所示: -盖茨比前端 -django -django 我可以看到两种可能性: Django知道前端。通过Django提供一切,将/设置为静态URL Django不知道前端。通过django提供/api和/admin/由Web服务器处理 我觉得第二种方法更合适,但是我不知道如何为这种场景配置VirtualHost。firstch方法看起来像一个丑陋的黑

我正在尝试在单个域下部署基于gatsby的前端和基于django的后端。它将依赖于Apache和mod_wsgi。在一个完美的世界中,它应该如下所示:

  • -盖茨比前端
  • -django
  • -django
我可以看到两种可能性:

  • Django知道前端。通过Django提供一切,将
    /
    设置为静态URL
  • Django不知道前端。通过django提供
    /api
    /admin
    <代码>/由Web服务器处理
  • 我觉得第二种方法更合适,但是我不知道如何为这种场景配置VirtualHost。firstch方法看起来像一个丑陋的黑客


    我应该如何继续呢?

    编译完盖茨比项目后,django应该将其作为静态页面提供

    第一:盖茨比区应该在你的
    静态_private
    路径中

    第二:在django项目中,您将为/定义一个URL,该URL将调用索引视图

    最后:在您的视图中,您应该呈现您的盖茨比区的
    index.html

    URL.py:

    from django.contrib import admin
    from django.urls import path, re_path, include
    from . import views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('apis/', include('apps.urls')),
        path('/', views.index),
    ]
    
    views.py:

    from django.shortcuts import render
    
    def index(request):
        return render(request, 'index.html')
    
    请注意,如果您在前端处理路由,则索引视图的url模式应如下所示:
    re_path(“^.*$”,views.index)

    如果您在heroku上托管django应用程序,则需要whitenoise中间件,并在
    设置.py
    中进行设置:

    MIDDLEWARE = [
        ...
        'whitenoise.middleware.WhiteNoiseMiddleware',
        ...
    ]
    

    这里有一个文档:

    编译完盖茨比项目后,django应将其作为静态页面提供

    第一:盖茨比区应该在你的
    静态_private
    路径中

    第二:在django项目中,您将为/定义一个URL,该URL将调用索引视图

    最后:在您的视图中,您应该呈现您的盖茨比区的
    index.html

    URL.py:

    from django.contrib import admin
    from django.urls import path, re_path, include
    from . import views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('apis/', include('apps.urls')),
        path('/', views.index),
    ]
    
    views.py:

    from django.shortcuts import render
    
    def index(request):
        return render(request, 'index.html')
    
    请注意,如果您在前端处理路由,则索引视图的url模式应如下所示:
    re_path(“^.*$”,views.index)

    如果您在heroku上托管django应用程序,则需要whitenoise中间件,并在
    设置.py
    中进行设置:

    MIDDLEWARE = [
        ...
        'whitenoise.middleware.WhiteNoiseMiddleware',
        ...
    ]
    

    此处提供了一个文档:

    Gatsby build被拆分为多个不同的文件。AFAIK index.html必须位于templates目录中,所有其他gatsby文件必须位于STATIC_根目录中。我必须将静态URL设置为
    /
    ,因为在其他情况下index.html找不到它们。我说得对吗?我不知道你所说的
    static\u private
    是什么意思。在Django,你需要将静态文件放入
    static\u private
    中。py是在
    设置中定义的,然后存储在
    STATICFILES\u DIRS
    中。关于盖茨比文件,我指的是
    public
    中的生产构建文件,所有这些文件都需要位于django的静态路径中。如果清楚了,请告诉我,我会更新我的答案。您能提供一个示例settings.py文件吗?我仍然无法解决几个不同的问题:re_path(“^.*$”,views.index)将捕获所有内容,包括gatsby静态文件,我无法设置正确的静态_URL=“/”,因为它将与媒体_URL冲突,我不知道如何配置模板和静态文件_dir(gatsby index.html应该属于这两个文件?).你能找到解决办法吗?如果你愿意的话,我们可以聊一聊,也许解释起来会更容易些?盖茨比的构建分为几个不同的文件。AFAIK index.html必须位于templates目录中,所有其他gatsby文件必须位于STATIC_根目录中。我必须将静态URL设置为
    /
    ,因为在其他情况下index.html找不到它们。我说得对吗?我不知道你所说的
    static\u private
    是什么意思。在Django,你需要将静态文件放入
    static\u private
    中。py
    是在
    设置中定义的,然后存储在
    STATICFILES\u DIRS
    中。关于盖茨比文件,我指的是
    public
    中的生产构建文件,所有这些文件都需要位于django的静态路径中。如果清楚了,请告诉我,我会更新我的答案。您能提供一个示例settings.py文件吗?我仍然无法解决几个不同的问题:re_path(“^.*$”,views.index)将捕获所有内容,包括gatsby静态文件,我无法设置正确的静态_URL=“/”,因为它将与媒体_URL冲突,我不知道如何配置模板和静态文件_dir(gatsby index.html应该属于这两个文件?).你能找到解决办法吗?如果你愿意的话,我们可以聊一聊,这样会更容易解释,也许吧?