создание универсальной записи url () с использованием регулярных выражений - PullRequest
0 голосов
/ 30 июня 2018

Итак, у меня не было проблем с моей маршрутизацией 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 и попытаться разобраться в этом, но в то же время ...

Что я здесь не так делаю?

1 Ответ

0 голосов
/ 02 июля 2018

Хорошо, был почти там. Я изменил:

url(r'^(?:.*)/?$', TemplateView.as_view(template_name='index.html')),

К этому:

url(r'^(?:.*)/$', TemplateView.as_view(template_name='index.html')),

Что предотвратило ошибку Uncaught SyntaxError: Unexpected token <. Он будет загружать части веб-приложения, но не полностью. Эта проблема была связана с кодировкой URL, поэтому мне пришлось очистить форматы моих URL. Вопрос у меня был об этом здесь:

Запретить кодировку URL, которая удаляет знаки равенства из URL

Теперь все, кажется, загружается правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...