Настройка Django и Webpack на сервере dev с использованием подкаталога api - PullRequest
0 голосов
/ 11 ноября 2019

Контекст:

Я использую Django в качестве бэкэнда и Vue / Vuetify в качестве отдельного интерфейса. Я использую Apache для обслуживания внешнего интерфейса, а Django предназначен исключительно для вызовов API в настройке клиент / сервер.

Я настроил WSGIScriptAlias ​​для обслуживания из [base_url] / api вместо корня сайта. Я развернул проект, и он обслуживает запросы / отклики django из / api, как и ожидалось.

В моей среде разработки я использую 2 одновременных сервера разработки. Я использую сервер веб-пакета (порт 10000) для внешнего интерфейса и сервер запуска django на отдельном порту (10001) для обслуживания моих запросов при разработке.

в веб-пакете я настроил следующее:

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, Django перенаправляет на http://localhost:10000/admin.

Я ищу выход за пределы WSGIScriptAlias ​​(так как яя не могу использовать это в своем экземпляре dev, если я не настроил локальный apache / virtualhost, с которым у меня возникли проблемы с обновлением при изменении django).

Есть лиКак я мог бы сделать одно из следующих действий?

A) в рабочей среде не иметь WSGIScriptAlias ​​/ Django в рабочей среде отбросить часть запроса / api (что сделает шаблоны URL согласованными во всех средах)

B) возможно, установите базовый URL в настройках Django или сервере запуска для включения / api, чтобы он не пытался перенаправить без / api

C), возможно, что-то в веб-пакете, которое мне не хватает дляНастройка devserver?

Полное раскрытие: Есть еще один вопрос, который задает что-то подобное ( Как установить базовый URL в Django ), но отличаетсяпохоже, что они говорят о производстве, я говорю об экземпляре разработчика. Их решением было также использовать WSGIScriptAlias, который я не могу использовать.

1 Ответ

0 голосов
/ 11 ноября 2019

Это не самое идеальное решение, но добавление / api в конец WSGIScriptAlias, кажется, стандартизировало все между dev и production. Чтобы избежать необходимости добавлять «api /» в начало всех моих базовых шаблонов url, я создал оболочку для 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,bview,bkwargs=None,bname=None):
    global base_pattern
    return re_path(route=base_pattern + broute, view=bview, kwargs=bkwargs, 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

...