如何快速看懂一个 django 项目? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
daveze
V2EX    Django

如何快速看懂一个 django 项目?

  •  
  •   daveze 2016-07-18 12:48:05 +08:00 6612 次点击
    这是一个创建于 3373 天前的主题,其中的信息可能已经有所发展或是发生改变。

    django 新手,公司刚好有个机会可以让我试试 django 的开发,但是 clone 下整个项目,配好开发环境,感觉一片茫然,大牛写的代码太复杂了。 大家有什么好的办法,指导下如何去熟悉一个 django 项目嘞?

    21 条回复    2016-07-19 13:34:04 +08:00
    Mark24
        1
    Mark24  
       2016-07-18 12:53:17 +08:00
    先熟悉 Django 的 App 插件式的 MVC 的套路
    再熟悉你们公司大牛写代码的套路
    硬着头皮看通一个,一通百通
    felixzhu
        2
    felixzhu  
       2016-07-18 12:55:57 +08:00
    盯着一个 request 的看处理流程,
    然后给自己领一个任务,尝试着去做,功能做出来之后找人 review ,两三次保证就熟了
    Lihz
        3
    Lihz  
       2016-07-18 13:11:09 +08:00
    url->view->models
    linuxchild
        4
    linuxchild  
       2016-07-18 13:27:23 +08:00 via Android
    理解项目的目标,然后看各个 app 实现的功能, models ,再看 views ,然后根据 urls 走一遍
    likezun
        5
    likezun  
       2016-07-18 13:50:36 +08:00
    无解
    andrewpsy
        6
    andrewpsy  
       2016-07-18 14:40:56 +08:00   2
    不熟悉 Django 但我总结的看现存项目代码的方法应该可以套用到任何类型的项目:
    1. 如果你们的项目没有版本控制,请辞职。
    2. 从第一 commit 开始,大致浏览一遍提交简介( commit messages )。这步很重要,主要是大致了解项目的进化过程。一行代码都不要看。如果 commit message 都是 wip 或者 backup 或者“顶”这类的无用信息,请辞职。
    3. 在项目进化过程中挑出大牛写的 feature 们,决定一个主攻方向,最好不要挑太基础的库,应当优先挑一个迭代次数适中的商务逻辑的实现。这时可以画画流程/关系图什么的。
    4. 把决定好的那个商务逻辑涉及到的主要文件找出来( IDE 只打开这些文件),用版本控制看第一次提交的代码。如果一个商务逻辑只有一个 commit 并一次添加了几十上百个文件,可考虑辞职也可以挺一挺,主要看你的能力和决心。
    5. 用版本控制不断 checkout 重要 commit ,循序渐进的看下去。不需要非常仔细的读通每行代码。主要是看大牛如何实现商务逻辑的需求并如何应对需求变化(看思维方式和处理问题的风格,需求变化时如何 refactor 这一点估计可以看出大牛人的性格)。到这个程度后看不懂的东西问大牛大牛没法不好好对待你了。
    Shawdon
        7
    Shawdon  
       2016-07-18 14:57:34 +08:00
    不自己搜索下就来提问题真的好么?
    http://sjc.v2ex.com/t/262436
    daveze
        8
    daveze  
    OP
       2016-07-18 15:30:46 +08:00
    @Shawdon 感谢,下次注意
    shooter
        9
    shooter  
       2016-07-18 16:02:43 +08:00
    @andrewpsy 从第一个 commit 看, 会死
    upczww
        10
    upczww  
       2016-07-18 16:56:00 +08:00 via Smartisan T1
    我的建议是看下 django 的教程,不习惯英文看这里 python.usyiyi.cn 先理清它的结构,是怎么工作的,然后再去看你说的那个项目。
    julyclyde
        11
    julyclyde  
       2016-07-18 17:34:12 +08:00
    boyhailong
        12
    boyhailong  
       2016-07-18 19:48:16 +08:00
    首先熟悉 django 最小的项目是如何布局的;一个请求和回应以及模版渲染怎么回事;至于后台逻辑,当然得看下文档咯
    daveze
        13
    daveze  
    OP
       2016-07-18 21:39:05 +08:00
    @boyhailong 最小项目结构是看得懂,但是一到公司的项目,就懵逼了,各种语句见都没见过...
    daveze
        14
    daveze  
    OP
       2016-07-18 21:41:31 +08:00
    @andrewpsy git 是有的, commit 也是规范的,我也觉得从第一个看是个方法,但是看了下有 400 多个 commit....感觉可以重点看下前期的
    lichee
        15
    lichee  
       2016-07-18 21:47:05 +08:00
    把 django book 快速看一遍 就 ok 了
    andrewpsy
        16
    andrewpsy  
       2016-07-19 01:05:27 +08:00
    @shooter 第一个 commit 往往决定了后面的走向,所以认真看一下,后面怎么办我在第五条里说了“ checkout 重要 commit ”看,不需要也不可能短时间内每行代码都看懂,主要是看懂个大概。


    @daveze 见以上。共 400 多个 commit 算是挺好的了。我们组的拳头产品一个月的 commit 都不止 400 。
    ericls
        17
    ericls  
       2016-07-19 01:20:22 +08:00
    Django 写出来看不懂 可能是写的人没写好
    georgema1982
        18
    georgema1982  
       2016-07-19 01:21:35 +08:00
    @daveze 比如什么样的语句?
    cxh116
        19
    cxh116  
       2016-07-19 08:16:42 +08:00 via Android
    首先看懂 python 代码,然后自己用 django 参考官方手册不用 admin 写个 crud 操作,这样差不多入门了。应该看懂别人的代码大概没问题了。
    lenciel
        20
    lenciel  
       2016-07-19 11:06:59 +08:00
    首先你要对 Django 框架有个大概的理解,然后从小 bug ,小 feature 开始做,逐步深入 Django 这个框架,同时理解公司的业务逻辑。

    学习过程中,你会发现公司的项目随着时间沉淀,会大量使用 CBV 。而你能找到的教程和示例工程都是 FBV 多一点,所以你需要花一些时间看明白那些基础类在干什么,业务逻辑和数据是如何分离的,前端和后端是如何分离的。

    接下来你大概就可以从后端的开发里面抬起头,来看看整个公司的 tech stack 。去理解前端和后端是怎么配合的,去理解运维和部署是怎么自动化的等等。

    我还有个建议,在学习里面有任何问题,其实问身边人是最快的。我看了一下这些回帖,感觉有指导意义的不多。比如有回复说 Django 是 MVC 框架的,有回复说了一堆都是什么情况你该 quit 的...很多时候一个 repo 里面真正难懂的是业务逻辑(这里是在做什么)和方案选择(为什么这里要这样做),外面的人怎么可能比同事清楚呢?
    daveze
        21
    daveze  
    OP
       2016-07-19 13:34:04 +08:00
    @lenciel 在这能遇上真是好巧啊;
    其实对于这个庞大的问题,是想看看广大人民群众的做法,真正具体的问题肯定是要问公司身边的人,不幸的是现在还不够熟悉项目( django ),导致有很多疑问但是不知道从何提起,想提问却似乎找不到问题的切入点。因此就是想自己把项目的总体流程搞清楚了,把各种基本的 django 知识弄明白了,再遇到具体问题,则可以具体请教。

    然后我现在可以去了解下 CBV 和 FBV 的异同...试试在公司项目中找到 CBV 的特点。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1467 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 16:27 PVG 00:27 LAX 09:27 JFK 12:27
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86