使用正则表达式创建全部url()条目

时间:2018-06-29 22:04:53

标签: python regex django reactjs react-router-dom

因此我的Django和React URL路由在开发中的问题为零,但是现在我试图进入生产阶段,遇到了各种各样的问题。

是的,关于正则表达式,我很烂。看起来就像只猫在键盘上走路。绝对是我需要坐下来并致力于学习的东西。

在开发人员中,我最擅长的是完美运行的以下内容:

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')),

这有效。该Web应用程序已加载,我能够进行导航。

但是,当涉及到验证电子邮件链接时,出现了另一个问题。我遇到Page not found (404)的问题,同样,这在我的开发设置中也不是问题。

电子邮件链接如下所示:

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发送请求从富裕。因此,看来我需要做一个让JS顺利通过的包罗万象的东西。

我遇到了一个似乎相关的问题:react routing and django url conflict。因此,我添加了以下内容,以使我拥有/渔获物,然后拥有“一切-其他”渔获物。

# 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 route all non-catched urls to included urls.py

url(r'^', TemplateView.as_view(template_name='index.html')),

结果Uncaught SyntaxError: Unexpected token <

django catching any url?

url(r'^.*', TemplateView.as_view(template_name='index.html')),

请参阅上文。

因此,我们将深入研究Django,正则表达式,并尝试对其进行梳理,但与此同时...

我在这里做什么错了?

1 个答案:

答案 0 :(得分:1)

好的,快到了。我修改了:

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

对此:

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

这防止了Uncaught SyntaxError: Unexpected token <错误。它将加载Web应用程序的一部分,但不是全部。该问题是由于URL编码所致,所以我必须清理URL的格式。我对此有疑问:

Prevent URL encoding that is removing equals signs from URL

现在一切似乎都正确加载了。