看了一段时间django官方文档,先把自己理解的django目录结构记录一下

目录结构

一个成熟的django项目的结构大致如下:

  1. /project/
  2. |-- project/
  3. |-- settings.py # 项目配置
  4. |-- urls.py # 项目路由定义
  5. |-- wsgi.py # nginx/apache
  6. |-- app/
  7. |-- templates/
  8. |-- app/
  9. |-- base.html # 模板
  10. ...
  11. |-- admin.py # 配置模型models在django原生后台的管理
  12. |-- apps.py # 应用级别的配置
  13. |-- forms.py # 表单处理逻辑
  14. |-- managers.py # 模型处理逻辑
  15. |-- models.py # 模型定义
  16. |-- urls.py # 路由设置
  17. |-- views.py # 控制层
  18. |-- tests.py
  19. ...
  20. |-- other-app/
  21. ... # 另一个应用
  22. |-- static/
  23. |-- app/
  24. |-- other-app/
  25. |-- admin/

django 以多个应用(app)耦合的形式来组合成一个大的web项目(project),多个app之间可以相互调用,如:

  1. from app1.models import SomeModel

所有应用需要在 settings.INSTALLED_APPS 中注册。除此之外,可在 settings.py 中配置一些公共参数,例如数据库,时区,邮箱,静态文件目录等

静态文件处理 static

好像django的静态文件位置没有限制,为了方便管理统一在根目录下面,按应用名建立目录。这样在web服务器 apahce/nginx 可以方便配置路径别名(Alias)转交web服务器直接进行处理。

同时在 settings.py 中设置 STATIC_URL = '/project/static/' 以在模板文件中通过{% static 'app/xxx.css' %}调用

django 原生后台管理 admin.py

django 自带admin 后台,通过 admin.py 很容易对简单的模型进行增删改查管理操作。

在业务逻辑不是很复杂的情况下,简单配置一下就可以实现对数据的管理。

django 路由控制 urls.py

  1. urlpatterns = [
  2. url(r'^$', views.IndexView.as_view(), name='home'),
  3. url(r'^more/$', views.delete, name='more'),
  4. ]

代码示例中有view函数和View类的两种不同定义方式

name参数定义在模板中解析的url变量名:{% url 'app:home' %}

django 模型定义 models.py & managers.py

个人认为学习理解 models 是掌握 django 的关键。跟以往php项目经验单独建立数据库不同,django 把数据库结构也包含到项目中。

models的定义主要包括数据表结构的各个字段(Field),表与表之间的关系(ForeignKey),对表的查询操作(Manager)

Field 和 Manger 都支持自定义

django 会根据models中的定义自动建立数据表:

  1. # 定义模型
  2. vim models.py
  3. # 生成变更
  4. python manage.py makemigrations
  5. # 执行变更
  6. python manage.py migrate

managers.py 属于 models 的一部分,我觉得这一块可以从models中拿出来单独定义。

它主要提供2个功能:

  • 修改默认的数据集 objects

    继承models.Manager 重写 get_queryset 方法,对默认的 queryset 进行预处理
    1. class DahlBookManager(models.Manager):
    2. def get_queryset(self):
    3. return super().get_queryset().filter(author='Roald Dahl')
  • 扩展默认的查询方法

    个人理解这里定义自己想要的各种复杂查询
  1. class PollManager(models.Manager):
  2. def with_counts(self):
  3. from django.db import connection
  4. with connection.cursor() as cursor:
  5. cursor.execute("""
  6. SELECT p.id, p.question, p.poll_date, COUNT(*)
  7. FROM polls_opinionpoll p, polls_response r
  8. WHERE p.id = r.poll_id
  9. GROUP BY p.id, p.question, p.poll_date
  10. ORDER BY p.poll_date DESC""")
  11. result_list = []
  12. for row in cursor.fetchall():
  13. p = self.model(id=row[0], question=row[1], poll_date=row[2])
  14. p.num_responses = row[3]
  15. result_list.append(p)
  16. return result_list

django 逻辑控制 views.py & froms.py

相当于MVC中的 Controller 控制层。定义为各种函数,从传入的 request 中获取请求参数,生成 response

django 提供了很多封装函数如 render,get_object_or_404来方便处理。

此外,还可以使用基本视图类处理请求,View,TemplateView,RedirectView

forms 属于 views 的一部分,同样我觉得可以单独拿出来处理

它主要负责 views 从 request 中获取参数并预处理这部分逻辑

django 视图模板 templates

模板选择在 views 中通过render制定, 或 继承的 TemplateView 中定义template_name

template 文件支持继承,子模板通过重写 <% block %> 块来渲染不同页面:

  1. # base.html
  2. <div>Public block</div>
  3. {% block private %}{% endblock private %}
  1. # child.html
  2. {% extends 'base.html' %}
  3. {% block private %}
  4. <div >private block</div>
  5. {% endblock private %}

[Django笔记] django结构分析的更多相关文章

  1. Python之路【第二十三篇】:Django 初探--Django的开发服务器及创建数据库(笔记)

    Django 初探--Django的开发服务器及创建数据库(笔记) 1.Django的开发服务器 Django框架中包含一些轻量级的web应用服务器,开发web项目时不需再对其配置服务器,Django ...

  2. python学习笔记--Django入门四 管理站点--二

    接上一节  python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...

  3. Web框架——Django笔记

    Web框架--Django笔记 MVC和MTV MVC:Model.View.Controller MTV:Model.Template.View Django--MTV 1.创建Django程序   ...

  4. 《玩转Django2.0》读书笔记-Django配置信息

    <玩转Django2.0>读书笔记-Django配置信息 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 项目配置是根据实际开发需求从而对整个Web框架编写相应配置信息. ...

  5. 《玩转Django2.0》读书笔记-Django建站基础

    <玩转Django2.0>读书笔记-Django建站基础 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.网站的定义及组成 网站(Website)是指在因特网上根据一 ...

  6. 笔记-django第一个项目

    笔记-django第一个项目 1.      创建项目 安装 Django 之后,现在有了可用的管理工具 django-admin.可以使用 django-admin 来创建一个项目: 看下djang ...

  7. Django笔记 —— 基础部分总结

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  8. Django笔记 —— Admin(Django站点管理界面)

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  9. Django笔记 —— 模型

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

随机推荐

  1. JavaUtil_06_HttpUtil_使用httpclient实现

    一.简介 使用 appache 的 httpclient 来实现的 二.源码 package com.ray.weixin.gz.util; import java.io.File; import j ...

  2. WingIDE用法笔记

    注释代码块 方法一:  ''' 被注释的代码块 '''   方法二:  选中要注释的代码块后 Ctrl + /,则选中的每一行都被# ,   用这种方法注释的代码,用Shift + Ctrl + / ...

  3. Debian for ARM

    /************************************************************************* * Debian for ARM * 说明: * ...

  4. bzoj 2434: 阿狸的打字机 fail树+离线树状数组

    题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=2434 题解: 首先我们可以发现这个打字的过程本身就是在Trie上滚来滚去的过程 所以我们 ...

  5. Cg与RenderMonkey 之旅

    http://news.mydrivers.com/1/15/15020_all.htm [前言] 您可能还没有意识到---您手头的这块显卡(或者说这块GPU)---它不仅仅是一个应用工具(游戏.平面 ...

  6. Eclipse或MyEclipse中给第三方jar包添加源码步骤

    0.目的 向web项目中添加mybatis源码. 1.项目结构如下 将mybatis的jar包添加到工程中 2.解压下载的mybatis压缩包(下载地址 https://github.com/myba ...

  7. Oracle 12c 新特性之 temp undo

    Oracle 12c R1 之前,临时表生成的undo记录是存储在undo表空间里的,通用表和持久表的undo记录也是类似的.而在 12c R12 的临时 undo 功能中,临时 undo 记录可以存 ...

  8. sessionStorage,localStorage,cookies

    1 HTML5的Storage主要分为两种:localStorage与sessionStorage,这两者主要在生命周期上有较明显的差别,localStorage的生命周期较长,原则上要等到透过Jav ...

  9. jumpserver遇到的坑

    安装:https://github.com/jumpserver/jumpserver,看readme照着做就行,下面是遇到的坑.   0.4.4版坑: 1.要升级pip,否则有的包装不上   2.p ...

  10. Poj 2350 Above Average(精度控制)

    一.Description It is said that 90% of frosh expect to be above average in their class. You are to pro ...