Развертывание Seprate React Frontend и Django DRF API - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть реагирующий интерфейс, созданный с помощью create-react-app для развертывания производственной сборки, которую я просто делаю npm run build.Мое приложение использует бэкэнд API Django Rest FrameWork.

Как настроить приложение для развертывания на одном сервере.Есть ли способ, которым я могу сохранить интерфейс React и направить его в Django и получить от него запросы на просмотр или конечную точку api/.

Каковы наилучшие стратегии для развертывания чего-либо подобного или этоЛучше разместить Frontend и Backend отчаянно на разных серверах?

В основном: Как мне объединить мою реактивную сборку внешнего интерфейса в Django DRF для развертывания?

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Вы можете использовать django в качестве контейнера для своего приложения реагирования.Запустите «npn run build» в корневой папке вашего реактивного проекта.Он сгенерирует каталог сборки и объединит все файлы 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'))

Выполните вызовы API из приложения реакции, используя 'axios'или native fetch api.

После этого всякий раз, когда вы нажимаете URL для вашего проекта django, он будет перенаправляться в приложение реагировать.Вы можете разместить это с Apache WSGI.У меня отлично работает.

Следующая ссылка может помочь: https://medium.com/alpha-coder/heres-a-dead-simple-react-django-setup-for-your-next-project-c0b0036663c6

0 голосов
/ 28 ноября 2018

Что я делаю, так это после обслуживания статического контента (встроенное приложение реакции), в DRF API есть точки входа, у которых есть шаблон, задающий контекст сервера (если вы хотите установить любой) в объекте clientConfig,

Кроме того, вам потребуется создать отдельный сценарий «инициализатора» для каждой конечной точки с маршрутами реакции в нем, предоставляя ему правильный селектор, который вы упомянете в шаблонах 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 вы должны использовать селектор .foobars в методе render.

Инициализатор :

ReactDOM.render(
    <Provider store={store}>
        <Router history={history}>
            <Switch>
                <Route name="index" exact path="/" component={FooBarComponent} />
            </Switch>
        </Router>
    </Provider>,
    document.querySelector(".foobars")
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...