我正在尝试使用Django作为后端以及React作为前端来设置项目。该项目有几个屏幕,后端中包含许多数据库信息和后端生成的图像,并将包括对不同屏幕的一些身份验证和用户权限。
根据我发现的内容-最好的方法是让Django渲染html文件:
def index(request):
return render(request, 'frontend/index.html')
引用一个.js文件:
<script src="{% static "frontend/main.js" %}"></script>
使用Webpack创建的。
此main.js使用REST API从Django检索所需的数据:
fetch("...some Django endpoint..").then(response => ... this.setState(...retrieved data...))
与仅将Django用于后端+前端使用Django模板不同,后端可以将上下文直接发送到模板:
def index(request):
context = {'information': .... retrieve info from DB}
return HttpResponse(loader.get_template('bla/index.html').render(context, request))
,模板可以直接使用此信息,而无需再次引用后端:
{% for bla in information %}
我想知道这是否是一个合理的设置?
让前端使用REST来检索所需的每条信息,而后端为需要提供的数据的每一部分公开另一个REST api,似乎太过分了(而不是将所有信息都推送到一个单独的dict和连同模板一起发送),
此外,它至少需要2个RTT才能呈现整个页面(我想通常是可以的)
答案 0 :(得分:10)
根据我发现的内容-最好的方法是让Django渲染html文件:
我不同意这一行。我会说最好将react应用程序和Django应用程序完全分开。 我相信,Django应用程序应仅提供API和adminsite(也许取决于您的需求)。 前端应该是一个独立的应用程序,可以通过NGINX / ExpressJs / Apache等提供服务。
此设置有几个优点。
从Django应用程序的角度来看,优点是:
将前端应用程序从后端释放是最好的事情。例如:
还有更多advantages of using NGINX to serve those contents。
有generic advantages of having backend and frontend separated可供您阅读,有关设置单独的Django + ReactJs应用的信息。
答案 1 :(得分:1)
您可以使用GraphQL,它比REST有很多优点,例如:
使用react Server Side Rendering,您可以获取页面而无需其他请求-“预填充” /重新水化,可以进行交互-缩短交互时间。
答案 2 :(得分:0)
您可以使用我编写的框架来设置样板项目,该框架可以立即实现您要寻找的目标。在服务器上使用Django,在客户端上使用React。
https://github.com/rafay826/djudo
react客户端从Django接收API数据,并且身份验证由名为rest-auth的程序包处理。