the5fire

关注Python、Django、Vim、Linux、Web开发、团队管理和互联网--Life is short, we need Python.


从Django的Turotial中可以学到什么?

作者:the5fire | 标签:     | 发布:2013-08-13 6:42 a.m. | 阅读量: 12470, 12074
事情起源于chinaunixpython论坛的一个问题,有新手在学习Django的Tutorials时遇到的问题,于是到论坛求助。我看到之后让他发出自己的代码,看完他的代码,想了想,好像我还没有完整实现过Django的这份新手教程(获取我之前实现过,但是我已经忘了)。 于是花了半个小时实现了一下,然后放到github上供大家参考,我也把这个作为我练习Django中一些问题的基石。github: django_tutorial_demo

我自己在实现代码的过程中发现这个新手指导基本上就算是Django项目开发的一个缩影了。你完全可以做完它之后继续跟着它的思路走。从这个Tutorials中我们可以学到哪些东西呢?我自己总结了一下。

1. Django的基本使用

当然这个是最基础的了,一个入门教程读完,如果你还不能够开始使用这个东西那只能说明这个入门教程写的很失败。Django无疑做的很优秀,几节的入门教程就把其常用的东西(urls、views、model、admin、test)介绍完毕,确实很不错。

2. Django项目的布局

在做实际项目开发的时候,在写代码前的第一件事就是搭一个整体的架子,在这个Tutorials中基本上包含了源码的所有结构,从project到app的位置,还有template以及静态文件的位置,一个合理的项目结构也应该是如此划分。这对于编写可复用的模块(app)很有帮助。

3. 灵活的url配置

大多数从其他语言转过来的程序员在页面或者代码中用到url的地方,习惯于写完整的url地址。(这可能是我个人猜测),因为从有其他语言经验的人在转到Python,开始用Django写代码时,会以解决问题为目标,很少回去考虑在Django中怎么做才是优雅的。我自己就是个很好的例子,在之前的项目中基本没有用到django的url和reverse模块,找一个借口就是在我接手参与的项目的上下文中,没有这样的使用。

灵活url使用的例子就是:

<form action="{% url 'polls:vote' poll.id %}" method="post">
    {% csrf_token %}
    {% for choice in poll.choice_set.all %}
    <input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}" />
    <label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br />
    {% endfor %}
    <input type="submit" value="Vote" />
</form>

#以及
...
return HttpResponseRedirect(reverse('polls:results', args=(p.id,)))

4. Class Base View(CBV)的使用

我见过的大多数项目在写view层的时候都是清一色的FBV(function base view),所有的东西都要自己来写。虽然有些不涉及具体某个Model的逻辑这么写没问题,但是对于针对具体Model的业务逻辑,这个东西确实能让你少些很多代码。

不过这个东西的使用打个比喻来说就是,用FBV像是在写作文,所有措词用句都得自己发挥,而CBV就是完形填空,填好几个项,一片文章就完成了。

5. TDD测试驱动开发

上次写Django的测试代码还是在去年,不得不说我目前对开发中的测试重视程度还是不够。前段时间在给admin2提一个pull-request的时候,该项目的拥有者pydanny说必须要有一个测试用例来证明你的代码是可以工作的。于是我便去看了该项目中别人写的TestCase,然后模仿着写出一个TestCase出来,然后才enjoy merge。从这我也意识到,对自己代码负责的最好方式是写个TestCase出来,让它有方法被确保不出错。

Django把测试放到Tutorial中确实是个不错的想法,让初学者一开始就知道有这样的东西存在,在一开始的项目中就建立其测试会保持良好的惯性。

一些不足

虽然在后面的Advanced Tutorial中有介绍如何打包和发布项目,但这似乎不是Django的重点。最后其实应该加上些部署方面的东西就完整了,让初学者认真的学完这一系列之后就可以搭一个自己的网站出来。

- from the5fire.com
----EOF-----

微信公众号:Python程序员杂谈

【上一篇】 Django-South介绍
【下一篇】 South的两个不适用场景

其他分类: