前言】中型的项目是比较多的APP,肯会涉及多数据表的操作。如果有人带那就最好了,自己要先了解基本的django框架(MTV ,ORM等)师傅可以给讲解一下框架怎么组织url.py,model.py,admin.py,view.py,.html顺序的,弄懂一个app。其他的也就触类旁通了。由于使用的django框架公司没人用过,将自己摸索学习的过程记录一下。

一、工程项目介绍

1、一个erp管理系统,41个文件目录,190个文件,还算是一个中型的项目。好在里面的APP有相似的,无需全部搞懂所有的,只需搞懂那么一个,触类旁通。

​  

2、运行界面

​  

二、先看一个完整的从请求到响应

网上一张完整的图:

大致几个步骤:

1. 用户通过浏览器请求一个页面 
2. 请求到达Request Middlewares,中间件对request做一些预处理或者直接response请求 
3. URLConf通过urls.py文件和请求的URL找到相应的View 
4. View Middlewares被访问,它同样可以对request做一些处理或者直接返回response 
5. 调用View中的函数 
6. View中的方法可以选择性的通过Models访问底层的数据 
7. 所有的Model-to-DB的交互都是通过manager完成的 
8. 如果需要,Views可以使用一个特殊的Context 
9. Context被传给Template用来生成页面 
    a.Template使用Filters和Tags去渲染输出 
    b.输出被返回到View 
    c.HTTPResponse被发送到Response Middlewares 
    d.任何Response Middlewares都可以丰富response或者返回一个完全不同的response 
    e.Response返回到浏览器,呈现给用户    
  参考:https://blog.csdn.net/a289237642/article/details/81213067

三、正式分析

分析的前提,默认已经设置好所有的数据库,可以运行工程,就差读懂代码。

wsgi到中间件就略过了,我们分析主要的程序!!

1、先找到seting.py所在的目录

2、打开url.py

可以看到,有初始的admin对应的view,后面两个是分APP所在的目录对应的url.py,所以url.py不止一处。

3、打开workflow.view.start函数

view里面的函数都是对数据库的操作,是对数据的承上启下作用,我们看箭头指的那个表Modal(models.py里面的类)

4、在view.py的同级目录下,找到admin.py

这里他进行了Mddal类的绑定:

找到后面那个绿色区域的类,那里就是web后台。django自带的后台管理。所谓后台,就是对model.py里面定义的数据库字段,进行前台显示。

5、我们找到modal所在的models.py,这里面是对数据库中字段的定义,“=”左边是数据库中的字段名,右边“workflow code”是可以自己命名的,将显示在前端。可以命名成汉字。打开:

里面是对列的定义。类名就是表名,类里面的字段代表数据表中的字段(code),数据类型则由CharField(相当于varchar)、DateField(相当于datetime), max_length 参数限定长度。具体里面models的函数,参考:https://www.cnblogs.com/dreamkeeper/p/7623894.html

其对应的数据库里面的字段:

6、如此,我们的代码和数据库交互了起来,我们可以在view()中对数据库进行增删改查,view()中还要负责将数据映射到html文件中,html再动态链接css渲染,输出到界面。注意,我们的分析过程并不是一条直线,在view()处分成了两路。view()往下的我们分析过了,下面分析view()往上到达html的。

7、还是回到view.py,找到start函数,在类的最后我们看到了类的调用:

调用了.html文件

8、html文件里面包含太多继承,除了base.html可以看懂,其他的我基本看不懂。那咋办呢?——我一般是打开对应的网页,然后看网页源码,这样将源码和其对应的html文件对比,也能明白个差不多。

html语言弄懂标签就简单了。

四、实战一个例子

1、basedata中的model.py

class ExpenseAccount(generic.BO):
    """
    基金账户
    """
    index_weight = 10
    status= models.CharField(_("基金ID"),max_length=const.DB_CHAR_NAME_120)
    qhzh = models.CharField(_("期货账户"),max_length=const.DB_CHAR_NAME_120)
    code = models.CharField(_("期货入金"),max_length=const.DB_CHAR_NAME_20,blank=True,null=True)
    yhzh = models.CharField(_("银行账户"),max_length=const.DB_CHAR_NAME_120)
    name = models.CharField(_("银行入金"),max_length=const.DB_CHAR_NAME_120)

    description = models.TextField(_("备注"),blank=True,null=True)
    parent = models.ForeignKey('self',verbose_name=_("parent"),null=True,blank=True)

    class Meta:
        verbose_name = _('expenses account')
        verbose_name_plural = _('基金账户')
        #对记录的排序,两个是二级排序
        ordering = ['-modification','status']

2、admin.py

class ExpenseAdmin(generic.BOAdmin):

    list_display = ['status','qhzh','code','yhzh','name','modification','description']
    list_display_links = ['code','name']
    search_fields = ['name']

五、小结

django框架是比其他框架复杂一些,基于mvt架构理论理清其中url,models,view,admin,html几者的关系就简单了。在复杂一些的django项目,也就是增加了APP的数量。当然此时会涉及更多的框架之外的知识,比如数据库表的一对多等等。需要多看,多学习吧!我又浅尝辄止了……

原文链接:
https://www.cnblogs.com/huangfuyuan/p/Django.html


识别图中二维码,领取python全套视频资料

新手怎么读懂一个中型的Django项目的更多相关文章

  1. 读懂一个中型的Django项目

    转自https://www.cnblogs.com/huangfuyuan/p/Django.html [前言]中型的项目是比较多的APP,肯会涉及多数据表的操作.如果有人带那就最好了,自己要先了解基 ...

  2. Django入门第一步:构建一个简单的Django项目

    Django入门第一步:构建一个简单的Django项目 1.简介 Django是一个功能完备的Python Web框架,可用于构建复杂的Web应用程序.在本文中,将通过示例跳入并学习Django.您将 ...

  3. 使用一个Python脚本来运行一个简单的Django项目

    创建视图 Django是一个模型-模板-视图(model-template-view,MTV)框架. 视图部分通常检查看HTTP给出的请求和查询或者结构,这些信息是发送到表示层的数据. 我们在 hel ...

  4. 创建一个简单的Django项目

    1.首先,启动pycharm,点击File->New Project,如下图所示. 2.在New Project对话框中,选择Django,在Location中设置项目路径以及项目名称,在App ...

  5. bae3.0第二步 添加一个空的django项目

    1.创建django项目: 进入bae应用源码目录(appidd01iud80bg)执行django-admin.py startproject blog2.修改index.py的内容如下所示 #-* ...

  6. 三 vue学习三 从读懂一个Vue项目开始

    源码地址:     https://github.com/liufeiSAP/vue2-manage 我们的目录结构: 目录/文件 说明 build 项目构建(webpack)相关代码. config ...

  7. 创建一个规范的django项目

    1. 创建项目 2. 创建static目录及配置 1.创建放css, javascript,img的目录 2.在settings.py中将static绝对路径保存到变量STATICFILES_DIRS ...

  8. 第一个Django项目

    安装 pip install Django==2.0.5 命令行下创建Django项目 django-admin startproject first_project # 创建项目 cd first_ ...

  9. 线上Django项目python2到3升级日记

    这两天干了一个几斤疯狂的事情,花不到一个工作日的时间把一个线上Django项目语言版本从python2升级到Python31.字典的一个语法变化 Python2.7: if dict1.haskey( ...

随机推荐

  1. 使用burpsuite来扫描漏洞

    一张图说明全文.

  2. Pgsql特殊排序

    对字段值为A,B,C,D的时候进行特殊排序. CASE WHEN aa = 'H' THEN ' WHENaa = 'O' THEN ' ELSE aa END 对数字进行排序,升序,0排到最后面 C ...

  3. yield return关键字怎么使用?

    在迭代器块中用于向枚举数对象提供值或发出迭代结束信号.它的形式为下列之一: 复制代码 yield return <expression>;yield break; 备注计算表达式并以枚举数 ...

  4. MapReduce原理<转>

    江湖传说永流传:谷歌技术有"三宝",GFS.MapReduce和大表(BigTable)! 谷歌在03到06年间连续发表了三篇很有影响力的文章,分别是03年SOSP的GFS,04年 ...

  5. Okra框架(一) 简介

    Okra是一个构建在Netty框架和Disruptor框架之上轻量级JAVA服务器框架. 使用Netty实现高性能,可灵活扩展的网络通信,使用Disruptor实现高吞吐量,低延迟的并发. Okra主 ...

  6. shell自动交互之expect脚本_转

    转自:linux expect详解(ssh自动登录) shell脚本实现ssh自动登录远程服务器示例: #!/usr/bin/expect spawn ssh root@192.168.22.194 ...

  7. Centsos7修改密码

    CentOS 7.0 进入单用户模式修改Root密码 时间:2017-05-02 01:10来源:blog.csdn.net  作者:海哥_大大的Java 举报   点击:506次 一.启动时,随便按 ...

  8. java开发总体知识复习

    上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大家. 对于这次跳槽找工作, 我准备了挺长的时间, 其中也收集了很多比较好的笔试面试题, 大都是一些常用的基础, 很多都是由于时间 ...

  9. 关于 AfxSocketInit()

    一般来说 WASAtarup() 是应用程序调用的Windows Sockets dll的第一个函数,在调用任何Winsock Api之前,必须调用WSAStartup()进行初始化,最后调用WSAC ...

  10. JavaScript的parseint()函数

    定义和用法 parseInt() 函数可解析一个字符串,并返回一个整数. 语法 parseInt(string, radix) 参数 描述 string 必选项.要转换为数字的字符串. radix 可 ...