2016-12-04 68 views
0

我正在寻找一些建议,然后才开始新项目。Django Web应用程序设计指南

我正在使用Django 1.10创建一个Web应用程序。我有与Django的经验,并创建一般的“基于内容”的网站。然而,由于这个项目将成为一个基于网络的应用程序,因此我打算做更复杂的事情,而不仅仅是渲染HTML模板并进行一些基本的CRUD操作。当我说“复杂”的事情时,我现在可以提供的最具体的例子是利用更多的异步请求,以便我的Web应用程序可以保持对用户的响应,并提供应用程序附带的“实时”体验可能会安装在他们的本地机器或其他什么。此外,由于这是一个网络应用程序,而不仅仅是一个网站,该项目肯定会更多的数据驱动,这可能意味着要求大量的数据,以分页的方式提供最佳服务等。

所以,我虽然是这个.....因为我熟悉Django并阅读了有关Django REST框架的好东西,所以我可以创建一个RESTful API来执行我所有的CRUD操作,并基本上与我的Web应用的核心数据库。在这一点上,我基本上可以有两个“层”:(1)表示层,它将呈现我的Web应用程序的页面;(2)一个应用程序层,它将完成我所有的后端CRUD操作。由于这两者是分开的,如果有必要,我还可以从其他渠道(除了我的Django网络应用程序)利用API获得额外的好处。

我想我的第一个问题是这是否有意义,如果是的话,思考最好的方式来实现它。我相信我有两个选择。

  1. 创建一个Django项目并将API作为单独的应用程序包含。这似乎可以正常工作,但它会将我的API与我的演示文稿结合起来,因为它们都由同一台服务器托管。哪个...如果API的唯一“消费者”是我的一个Django站点,那么这可能不是近期的问题,但可能会在稍后导致问题。

  2. 将两者分为两个不同的Django项目。这提供了最大的灵活性,可能是最好的答案,我想。

也可以使用其他选项。在这一天结束时,我正在寻找来自那些曾经做过这些事情的人的建议/指导,以及在开始这项工作之前我应该​​考虑的其他事情。

+0

我会建议制作一个Django REST框架来构建一个API,并用ReactJS或Angular做类似的前端。如果你需要有websockets,那么你可以添加Django-Channels。前端可能是静态文件和单独的项目。 –

回答

2

基本上,我不会建议数量的方法2.这是因为你的真快将开始与这样的问题而奋斗:在哪里存储模式?项目A,项目B,都是?此外,我几乎可以肯定,你将有两个django项目之间可以共享的其他代码。

值得在这里指出,在两个不同的Django的项目 - 你将与迁移同步的麻烦(只考虑同时在两个项目模型的改变)。就个人而言 - 我从来没有能够以一种好的,可以接受的方式解决这个问题。

也许我会与你分享我的个人经验 - 希望这会有所帮助。

  1. 首先是,如果你正在一个大的应用程序 - 考虑Django模板辞职 - 使用一些现代的js框架前端:反应,棱角分明;并为方案制定一个单独的项目。这很棘手,因为你需要在团队中拥有正确的能力。如果这是不可能的 - 那么分开django应用程序前面。

  2. 使用DRF - 您可以在您的项目中创建rest应用程序,并使用其他地方定义的所有模型 - 它将为您提供简单的CRUD,并且可以实现一些非常强大的工作。如果您能够在现代js框架中创建前沿,则可以使用此REST将数据提供给前端。还有你可以想象的任何其他客户。这基本上将需要在后端完成的工作量(仅REST而不是REST +模板和渲染)转移到前端。

  3. 异步任务。这里没什么新东西 - 用芹菜。在应用程序中定义你的任务;确保你有正确的工人数量。并让magic开始。

  4. 至于实时体验,你可以考虑使用django频道:https://github.com/django/channels/这是处理websocket连接的好方法。

观光考虑:

在大的应用程序通常你会落得这样的: myapp.com -> point to frontend; api.myapp.com -> point to the api 你应该在这两者之间的代码中明确分离。在你的前台是基于js的情况下 - 这不是问题,但是休息+渲染能够运行only-api-nodeonly-rendering-node非常重要。很难说哪一个会被更多地使用。

因此,基本上可以结束了这样的事情:

core 
    models 
     users.py 
my_app_frontend 
    users 
     views.py 
     forms.py 
     tasks.py 
     urls.py 
my_app_rest 
    users 
     serializers.py 
     views.py 
     signals.py 
     urls.py 
my_app 
    settings.py 
    rest_settings.py 
    manage.py 
    wsgi.py 
    rest_wsgi.py 
    urls.py 
    rest_urls.py 

这有一定的优势,我想:

  1. 模型是在同一个地方;
  2. 有可能运行两个分离nodes - 根据需要。
  3. 您的开发设置应该能够运行dev服务器作为whole。梳理前面的设置和休息。
  4. 有一个明确的代码分离 - 我们知道什么是上述结构。

如果您还有其他问题,请询问。

而且我很好奇什么其他人不得不说 - 他们如何处理问题,指出由我:)

编码愉快!