部署Seprate React Frontend和Django DRF API

问题描述 投票:1回答:2

我有一个用create-react-app制作的反应前端来部署这个的生产版本我只做npm run build。我的应用程序使用Django Rest FrameWork API后端。

如何在单个服务器上设置应用程序以进行部署。有没有办法可以存储React前端并在Django中路由它,并且来自前端的请求命中了api/视图或端点。

部署这样的东西的最佳策略是什么,或者更好地在不同的服务器上拼命地托管前端和后端?

基本上:如何将我的反应前端构建组合到Django DRF中进行部署?

django reactjs create-react-app amazon-elastic-beanstalk
2个回答
1
投票

您可以使用django作为您的反应应用程序的容器。在您的react项目根文件夹中运行“npn run build”。它将生成构建目录并捆绑所有javascript文件。将此build文件夹放在django项目的根目录中。并在settings.py文件中进行以下更改:

STATICFILES_DIRS = (
    ...
     os.path.join(BASE_DIR, 'build/static'),
     os.path.join(BASE_DIR, 'build')
...
)

并在urls.py中创建一个条目: -

url(r'^$', mView.login, TemplateView.as_view(template_name = 'index.html'))

使用'axios'或native fetch api从react app发出api调用。

在此之后每当你点击django项目的url时,它都会被重定向到react应用程序。你可以用apache wsgi来托管这个。对我来说很好。

以下链接可能有所帮助:https://medium.com/alpha-coder/heres-a-dead-simple-react-django-setup-for-your-next-project-c0b0036663c6


0
投票

我所做的是在提供静态内容(内置的反应应用程序)之后,DRF API中有入口点,它有一个模板,在clientConfig对象中设置服务器上下文(如果你想设置任何内容)。

此外,您需要为每个端点创建一个单独的“初始化程序”脚本,并在其中包含反应路由,为其提供正确的选择器,您将在Django模板中提及该选择器。

网址:path('foobars', views.FooBarsView.as_view(), name='foobars')

视图:

class FooBarsView(TemplateView):
    template_name = 'foobars.html'

    def get_context_data(self):
        return {
            "client_config": {}
        }

模板(foobars.html):

{% load static from staticfiles %}

<head>
    <link rel="stylesheet" href="{% static 'dist/css/foobars.css' %}"/>
</head>

<main class="foobars"></main>

<script type="text/javascript">
    var clientConfig = {{ client_config|safe }};
</script>

<script type="text/javascript" src="{% static "dist/js/foobars.min.js" %}"></script>

您必须在React应用程序中进行一些更改,即在.foobars方法中使用选择器render

初始化:

ReactDOM.render(
    <Provider store={store}>
        <Router history={history}>
            <Switch>
                <Route name="index" exact path="/" component={FooBarComponent} />
            </Switch>
        </Router>
    </Provider>,
    document.querySelector(".foobars")
);
© www.soinside.com 2019 - 2024. All rights reserved.