【发布时间】:2023-04-06 06:08:01
【问题描述】:
我之前多次使用过这种语法,但现在这给我带来了问题。定义模板 index.html 的 Django url 旨在接收站点的初始请求 (path('')...) 并返回 React 应用程序,然后任何页面 React 请求都将由 React (re_path(...)) 处理。无论如何,问题是如果我删除“re_path 抓取所有”网址。主页会加载,但任何其他页面都不会。现在考虑到过去这并不是什么大问题,我只是添加了正则表达式,它可以工作,即 . re_path(r'^(?:.*)/?$。现在,如果添加此代码,主页不仅不会加载,而且 axios 调用 retrievePicks 甚至不会命中 Django 后端,而是将 index.html 作为原始(大部分不可读)文本返回。但我现在可以转到任何其他页面,它工作正常。我尝试了多种方法,例如使用 fetch 而不是 axios,使用 post/detailed 操作(没有意义,因为它甚至没有进入 django 服务器),添加 Switch 组件,尝试重定向到另一个 url。我不明白为什么所有其他 axios 调用都可以正常工作,而这是唯一一个不能正常工作的。
我的package.json 将代理设置为http://localhost:8000 顺便说一句。
我在一个 linux 服务器上,使用 Gunicorn/Nginx,React 是用 create-react-app 构建的
由 axios 审查的原始文本
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/lib[...]
App.js
function App() {
return (
<Router>
<Switch>
<Redirect exact from="/" to="/home" />
<Route exact path="/login" component={LoginScreen} />
<Route exact path="/team/:name" component={TeamDetailScreen} />
<Route exact path="/" component={HomeScreen} />
</Switch>
</Router>
);
}
pickActions
export const retrievePicks = (token) => async (dispatch) => {
dispatch({type:"PICKS_REQUEST"})
try{
const config = {
headers: {
"Authorization": `Bearer ${token}`
}
}
const { data } = await axios.get('/api/games/picks/football?week=1', config)
dispatch({type:"PICKS_SUCCESS", payload:data})
}catch(err){
console.log('picks retrieval error', err.response)}
}
urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('api/games/', include('picksix.urls')),
path('api/users/', include('user.urls')),
path('', TemplateView.as_view(template_name="index.html")),
re_path(r'^(?:.*)/?$',TemplateView.as_view(template_name="index.html"))
]
【问题讨论】:
-
正则表达式注意:
^(?:.*)/?$与^.*/?$相同,调用(?:...)本身就很奇怪:如果您了解 RE,您就会知道它的作用以及为什么它可以作为 Djangore_path模式。如果你不知道它的作用,你为什么要使用它?因为如果您对此的回答是“因为它有效”,那么对此的回应是“您怎么知道?您所知道的是它还没有损坏尚未,您不知道是否它实际上有效” =) -
记住 cmets 是给 cmets 用的,不是用来回答的,记得阅读code of conduct。有人叫你说完全正常的编程结构“奇怪”是你,而不是他们,如果你的帖子解释说你正在使用某些东西,即使你暗示你不明白它为什么起作用,他们绝对应该问你为什么要使用它。
标签: reactjs django-rest-framework axios