Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django Web应用程序设计指南_Django_Django Rest Framework - Fatal编程技术网

Django Web应用程序设计指南

Django Web应用程序设计指南,django,django-rest-framework,Django,Django Rest Framework,在开始一个新项目之前,我正在寻求一些建议 我正在使用Django 1.10创建一个Web应用程序。我有使用Django和使用它创建通用“基于内容”网站的经验。然而,由于这个项目将是一个基于web的应用程序,我计划做更多“复杂”的事情,而不仅仅是呈现HTML模板和执行一些基本的CRUD操作。当我说“复杂”的事情时,此时我能给出的最具体的例子是利用更多的异步请求,这样我的web应用程序就可以对用户保持响应,并提供可能安装在本地机器上的应用程序所带来的“实时”体验。此外,由于这是一个web应用程序,而

在开始一个新项目之前,我正在寻求一些建议

我正在使用Django 1.10创建一个Web应用程序。我有使用Django和使用它创建通用“基于内容”网站的经验。然而,由于这个项目将是一个基于web的应用程序,我计划做更多“复杂”的事情,而不仅仅是呈现HTML模板和执行一些基本的CRUD操作。当我说“复杂”的事情时,此时我能给出的最具体的例子是利用更多的异步请求,这样我的web应用程序就可以对用户保持响应,并提供可能安装在本地机器上的应用程序所带来的“实时”体验。此外,由于这是一个web应用程序,而不仅仅是一个网站,因此该项目肯定会更加数据驱动,这可能意味着需要大量数据,这些数据最好以分页方式提供,等等

因此,我的想法是……因为我熟悉Django,并且读过关于Django REST框架的很多好东西,所以我可以创建一个RESTful API来执行所有CRUD操作,并基本上与web应用程序的核心数据库进行接口

在这一点上,我基本上可以有两个“层”:(1)一个表示层,它将呈现我的web应用程序的页面;(2)一个应用层,它将执行我的所有后端CRUD操作。由于两者是分开的,如果将来需要的话,我还可以从其他渠道(除了我的Django web应用程序)利用API,从而获得额外的好处

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

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

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


  • 可能还有其他选择。在这一天结束的时候,我正在寻找那些以前做过这些事情的人的建议/指导,以及在开始这项工作之前我应该考虑的其他事情。p> 基本上我不推荐第二条路。这是因为你真的很快就会开始与这样的问题斗争:在哪里存储模型?项目A和项目B都是??另外,我几乎可以肯定,您将有其他代码可以在两个django项目之间共享

    值得注意的是,在两个单独的Django项目中,您会遇到迁移的同步问题(只考虑两个项目中模型的同步改变)。就我个人而言,我从来没有能够以一种好的、可以接受的方式解决这个问题

    也许我会和你分享我的个人经历-希望这会有所帮助

    >P>首先,如果你正在做一个大的应用-考虑从Django模板辞职-使用一些现代JS框架的前端:反应,角度;并为fontend制作一个单独的项目。这很棘手,因为你需要在团队中拥有正确的能力。如果这是不可能的-我们做单独的django应用程序的前面

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

  • 异步任务。这里没什么新鲜事,用芹菜吧。在应用程序中定义任务;确保你有正确的工人数量。让
    魔术开始吧

  • 对于实时体验,您可以考虑使用Django通道:它是处理WebSoSt连接的好方法。

    考虑事项:

    在大型应用程序中,通常会出现以下情况:
    myapp.com->指向前端
    <代码>api.myapp.com->指向api
    您应该在代码中明确区分这两者。在前端基于js的情况下-这不是问题,但是rest+渲染非常重要,能够运行
    仅api节点
    仅渲染节点
    。很难说哪一个会被更多地使用

    所以基本上你可以这样结束:

    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
    
    这有一些我喜欢的优点:

  • 模型在一个地方
  • 可以根据需要运行两个独立的
    节点
  • 您的开发设置应该能够作为一个
    整体运行dev server
    。从前面和后面梳理设置
  • 有一个明确的代码分离-我们知道什么是在上面的结构
  • 如果你还有任何问题,请提问

    我也很好奇其他人说了些什么——以及他们如何处理我指出的问题:)


    快乐编码

    基本上我不推荐第二条路。这是因为你真的很快就会开始与这样的问题斗争:在哪里存储模型?项目A和项目B都是??另外,我几乎可以肯定,您将有其他代码可以在两个django项目之间共享

    值得注意的是,在两个单独的Django项目中,您会遇到迁移的同步问题(只考虑模型的同时改变)。