zoukankan      html  css  js  c++  java
  • 【Django】基于Django架构网站代码的目录结构

     经典的Django项目源码目录结构

     Django在一个项目的目录结构划分方面缺乏必要的规范。在Django的官方文档中并没有给出大型项目的代码建议目录结构,网上的文章也是根据项目的不同结构也有适当的变化。

    样式一 :强调模块化设计  参见参考文章二

    ··管理项目的依赖文件requirements文件夹,列出项目中需要的依赖的文件,比如项目使用的所有python包。

    ··分离应用文件和库文件(apps ,libs)新建apps和libs用来保存application和library

    ··创建完善的setting模块

    优势:模块化设计适合规模较大的项目

     缺点:这种布局结构没有说明static文件的放置路径。

    $ tree .
    .
    ├── djangolicious
    │   ├── apps
    │   │   ├── blog
    │   │   │   ├── __init__.py
    │   │   │   ├── models.py
    │   │   │   ├── tests.py
    │   │   │   └── views.py
    │   │   ├── __init__.py
    │   │   ├── news
    │   │   │   ├── __init__.py
    │   │   │   ├── models.py
    │   │   │   ├── tests.py
    │   │   │   └── views.py
    │   │   └── reader
    │   │       ├── __init__.py
    │   │       ├── models.py
    │   │       ├── tests.py
    │   │       └── views.py
    │   ├── __init__.py
    │   ├── libs
    │   │   ├── display
    │   │   │   ├── __init__.py
    │   │   │   ├── models.py
    │   │   │   ├── tests.py
    │   │   │   └── views.py
    │   │   ├── __init__.py
    │   │   └── management
    │   │       ├── __init__.py
    │   │       ├── models.py
    │   │       ├── tests.py
    │   │       └── views.py
    │   ├── settings
    │   │   ├── common.py
    │   │   ├── dev.py
    │   │   ├── __init__.py
    │   │   ├── prod.py
    │   │   └── test.py
    │   ├── urls.py
    │   └── wsgi.py
    ├── manage.py
    ├── requirements
    │   ├── common.txt
    │   ├── dev.txt
    │   ├── prod.txt
    │   └── test.txt
    └── requirements.txt
    
    10 directories, 36 files

    样式二,大型开源Django框架项目的 参见参考文章5

     此模板是开源项目常用的结构,适合大型Django项目开发。

    Project的目录结构,PROJ_NAME指的是项目名

    PROJ_NAME/
         __init__.py      这几个文件是django创建project所必须的,不做过多说明
         manage.py
         settings.py
         urls.py  
         apps/               即使是“小”工程,也建议分成多个app,每个app足够简单,只解决某一个方面的问题 (注1)
             myapp1/
             myapp2/
         extra_apps/     引用的其他app。
         libs/                加载第三方模块,可以避免版本冲突,按照标准的site-packages管理(注2)
               python*.*/  指定python版本号
                   site-packages/   
                   requirements.pip    #pip的依赖说明文件
         tests/          project级别的测试,对于每个app,还要有自己的测试代码
         static/          静态内容
                css/
                js/
                images/
         uploads/       上传文件所在目录
         templates/    模板目录,覆盖app的模板
                flatpages/
                comments/
                example/
                app1/
                app2/
         templatetags/    tag目录

    注1:指定app加载,在settings.py中设置:

    sys.path.insert(0, os.path.join(PROJECT_ROOT, 'apps'))
    sys.path.insert(0, os.path.join(PROJECT_ROOT, 'extras'))
    sys.path.insert(0, os.path.join(PROJECT_ROOT, 'libs'))  

    注2:自定义libs的加载,在settings.py中设置:

    sys.path.insert(0, '/{{MY_LIB)}/site-packages/*****.egg')
    sys.path.insert(0, '/{{MY_LIB}} /site-packages/')

    其中 app目录结构

    $APP_NAME/
         tests/                    app级别的测试代码
         models/                 注1
              __init__.py
              Amodels.py
              Bmodels.py
         templates/              注2
         templatetags/        tag目录

    注1:如果很好的控制app的规模,Model类数量少,可以使用惯用的models.py文件中, 否则将models做成一个package
    接下来可以有两种做法:

    1. 在__init__.py中import所有的Model类
    2. 指定Model的元类(Meta)的app_label, 参考这里

    注2:如果extend 工程下的base.html, 使用 !base.html

     我的总结

     ···样式一中强调的“Think Modular”思想十分适合大型的项目,大部分大型的项目也是遵循模块化目录结构的原则的。

    如下图所示: 

    -project
     ---app1
       --templates
         --statics
       views
       models
       tests
       urls
     ---app2
     ---appn
     statics
       --css
       --js
     settings 

    ···我在开源项目上看到的小型Project的目录结构差异较大,没有清晰的体系结构,规律不是很明显。

    参考文章

    Large Django application layout

    2 重要Django project structure  基于Django 1.4 project

    Project design / FS layout for large django projects [closed]

    4 Django官网提供的大型开源项目

    重要 Django最佳实践:项目布局   |   python开源项目目录结构

    AN UPDATED GENERAL DJANGO PROJECT (>= 1.5) STRUCTURE OR FOLDER LAYOUT

    Google小组上关于目录结构的讨论

  • 相关阅读:
    C语言--存储类、链接和内存管理
    Linux终端使用技巧——个人总结
    mini2440应用例程学习(二)—— buttons
    ubuntu安装配置NFS服务方便mini2440挂载
    shell中常用I/O重定向命令格式说明
    Linux Bash内置命令大全详细介绍
    mini2440应用例程学习(一)—— led-player
    Shell编程练习(一)——ping一下
    < IOS开发 >使用CGContextRef绘制文字时的设置
    < Objective-C >使用kvc获取数组最大最小值
  • 原文地址:https://www.cnblogs.com/codemyzen/p/3678787.html
Copyright © 2011-2022 走看看