Итак, у меня не было проблем с моей маршрутизацией URL Django и React в dev, но теперь, когда я пытаюсь перейти к работе, столкнулся с различными проблемами.
Да, я отстой, когда дело доходит до регулярных выражений. Похоже, кошка ходила на клавиатуре. Определенно, мне нужно сесть и посвятить себя обучению.
В dev, мое универсальное средство было просто следующим, которое отлично работало:
url(r'', TemplateView.as_view(template_name='index.html')),
На производстве я получил Uncaught SyntaxError: Unexpected token <
. Это, как мне объяснили, было связано с тем, что JS попал в URL вместо index.html
и что JS нужно было «пройти». Мне сказали попробовать:
url(r'^$', TemplateView.as_view(template_name='index.html')),
Это сработало. Веб-приложение загружено, и я смог ориентироваться.
Однако возникла другая проблема, когда речь шла о ссылках на электронные письма с подтверждением. У меня проблемы с Page not found (404)
, что, опять же, не было проблемой в моей настройке dev.
Ссылки электронной почты выглядят следующим образом:
https://test.example.com/auth/security_questions/f=ru&i=101083&k=6d7cd2e9903232a5ac28c956b5eded86c8cb047254a325de1a5777b9cca6e537
Что я получаю, так это:
Page not found (404)
Requested URL: http://test.example.com/auth/security_questions/f%3Dru&i%3D101083&k%3D6d7cd2e9903232a5ac28c956b5eded86c8cb047254a325de1a5777b9cca6e537/
Мои маршруты реагирования следующие:
<App>
<Switch>
<Route exact path='/auth/security_questions/f=:f&i=:id&k=:key' component={SecurityQuestions} />
<Route exact path='/auth/*' component={Auth} />
<Route exact path='/' component={Auth} />
</Switch>
</App>
Это должно сделать /auth/security_questions/...
маршрут.
Мой urls.py
следующий:
urlpatterns = [
# API authentication entry point
url(r'^api/auth/', include('authentication.urls', namespace='signin')),
# Any requets that come through serve the index.html
# url(r'^$', TemplateView.as_view(template_name='index.html')),
] + static(settings.STATIC_URL,
document_root=settings.STATIC_ROOT)
Также, authentication.urls
:
urlpatterns = [
url(r'^security_questions/', SecurityQuestionsAPIView.as_view(), name='security_questions'),
]
Кажется, что Django пытается обработать маршрутизацию, очевидно, что нет подходящего маршрута, тогда как на самом деле он должен просто отрендерить index.html
и позволить react-router-dom
вступить во владение для отправки запросов в API от FE. Таким образом, мне кажется, мне нужно сделать всеохватывающее, что пропустит JS.
Я натолкнулся на этот вопрос, который казался актуальным: Реагирует на маршрутизацию и конфликт URL-адреса Django . Поэтому я добавил следующее, чтобы у меня был /
catch, а затем «все остальное» catch-all.
# match the root
url(r'^$', TemplateView.as_view(template_name='index.html')),
# match all other pages
url(r'^(?:.*)/?$', TemplateView.as_view(template_name='index.html')),
Все равно не будет отображать ссылки для подтверждения. Перепробовал несколько других вариантов для последнего перехвата всех URL:
Django направляет все неперехваченные URL-адреса во включенные urls.py
url(r'^', TemplateView.as_view(template_name='index.html')),
Результаты в Uncaught SyntaxError: Unexpected token <
Джанго ловит любой URL?
url(r'^.*', TemplateView.as_view(template_name='index.html')),
См. Предыдущее.
Итак, собираемся покопаться в Django, regex и попытаться разобраться в этом, но в то же время ...
Что я здесь не так делаю?