【发布时间】:2019-09-09 23:45:57
【问题描述】:
当我使用
部署我的 django 项目时python manage.py runserver,我的反应应用与npm start,
我不知道哪一个是我的“真正的项目”。我认为问题归结为客户端渲染与服务器端渲染,现在我想使用服务器端渲染,因为我对 django 比对 react 更熟悉。这意味着我必须使用 django/drf 正确设置 url 和视图?如果是这样,我的问题如下......
每当我访问一个 url(例如 website.com/items)时,我如何“调用”做出反应。我想以格式良好的 html 文件返回我所有项目的列表。我怀疑这与 path() 函数中的模板参数有关。
如何防止用户访问 api 视图 (website.com/api/items),这是我用来处理 django-rest-framework 的 api 调用的 url,但我不希望人们访问看到这个但也想对“看到”这个做出反应。
因为我正在进行服务器端渲染,除了对我的 api url 进行正确的 http 调用并使我的 html 模板看起来很漂亮之外,我的 react 应用程序还需要做什么吗?
项目网址:
urlpatterns = [
path('admin/', admin.site.urls),
path('',include('App.urls')),
path('api/',include('App.api.urls'))
]
应用网址:
urlpatterns = [
path('', views.index, name='index'), #nothing much here yet
]
API URL:
urlpatterns = [
path('item',views.ListItem.as_view())
]
我的基本 React App.js 只是抓取所有项目并显示它们
class App extends Component {
state = {
items: []
};
async componentDidMount(){
try{
const res = await fetch('http://127.0.0.1:8000/api/item');
const items = await res.json();
this.setState({
items});
}
catch (e){
console.log(e);}
}
render(){
return(
<div>
{this.state.items.map(item =>(
<div key={item.id}>
<h1>{item.item}</h1>
<h1>{item.price}</h1>
<span>{item.description}</span>
</div>
))}
</div>
);
}
}
export default App;
【问题讨论】:
-
如果你想要的是服务器端的反应渲染,那么我根本不会使用 Django,而是使用 node.js(和 KOA/Express 等)。这将使您能够充分利用服务器端渲染的优势。虽然你可以同时使用 node.js 和 Django,但是你失去了服务器端渲染给你带来的一些好处(主要是因为使用两个服务器端应用程序可能会增加渲染的延迟)。
标签: html reactjs django-rest-framework