部署 Seprate React 前端和 Django DRF API
Deploying Seprate React Frontend and Django DRF API
我有一个用 create-react-app
制作的 React 前端来部署我刚刚做的生产构建 npm run build
。我的应用程序使用 Django Rest FrameWork API 后端。
如何设置应用程序以在单个服务器上部署。有没有一种方法可以存储 React 前端并在 Django 中路由到它,并让来自前端的请求命中 api/
视图或端点。
部署这样的东西的最佳策略是什么,还是将前端和后端拼命地托管在不同的服务器上更好?
基本上:如何将我的 React 前端构建结合到 Django DRF 中进行部署?
我所做的是在提供静态内容(构建的 React 应用程序)之后,在 DRF API 中有入口点,它有一个模板,设置服务器上下文(如果你想设置任何)在 clientConfig
对象中。
此外,您需要为每个端点创建一个单独的 "initializer" 脚本,其中包含反应路由,为其提供您将在 Django 模板中提及的正确选择器。
URL: 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 应用程序进行一些更改,即在 render
方法中使用选择器 .foobars
。
初始化器:
ReactDOM.render(
<Provider store={store}>
<Router history={history}>
<Switch>
<Route name="index" exact path="/" component={FooBarComponent} />
</Switch>
</Router>
</Provider>,
document.querySelector(".foobars")
);
您可以使用 django 作为您的 React 应用程序的容器。
运行 "npm 运行 build" 在你的 React 项目根文件夹中。它将生成构建目录并捆绑所有 javascript 文件。
将此构建文件夹放在 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' 或本机提取 api 从 React 应用进行 api 调用。
在此之后,每当您为 django 项目点击 url 时,它都会被重定向到 React 应用程序。您可以使用 apache wsgi 托管它。适合我。
关注 link 可能会有所帮助:
https://alphacoder.xyz/dead-simple-react-django-setup/
我有一个用 create-react-app
制作的 React 前端来部署我刚刚做的生产构建 npm run build
。我的应用程序使用 Django Rest FrameWork API 后端。
如何设置应用程序以在单个服务器上部署。有没有一种方法可以存储 React 前端并在 Django 中路由到它,并让来自前端的请求命中 api/
视图或端点。
部署这样的东西的最佳策略是什么,还是将前端和后端拼命地托管在不同的服务器上更好?
基本上:如何将我的 React 前端构建结合到 Django DRF 中进行部署?
我所做的是在提供静态内容(构建的 React 应用程序)之后,在 DRF API 中有入口点,它有一个模板,设置服务器上下文(如果你想设置任何)在 clientConfig
对象中。
此外,您需要为每个端点创建一个单独的 "initializer" 脚本,其中包含反应路由,为其提供您将在 Django 模板中提及的正确选择器。
URL: 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 应用程序进行一些更改,即在 render
方法中使用选择器 .foobars
。
初始化器:
ReactDOM.render(
<Provider store={store}>
<Router history={history}>
<Switch>
<Route name="index" exact path="/" component={FooBarComponent} />
</Switch>
</Router>
</Provider>,
document.querySelector(".foobars")
);
您可以使用 django 作为您的 React 应用程序的容器。 运行 "npm 运行 build" 在你的 React 项目根文件夹中。它将生成构建目录并捆绑所有 javascript 文件。 将此构建文件夹放在 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' 或本机提取 api 从 React 应用进行 api 调用。
在此之后,每当您为 django 项目点击 url 时,它都会被重定向到 React 应用程序。您可以使用 apache wsgi 托管它。适合我。
关注 link 可能会有所帮助: https://alphacoder.xyz/dead-simple-react-django-setup/