ZoomQuietDjanGo 体验学习历程

::-- ZoomQuiet [2005-12-31 06:55:32]

我的体验环境::
Python 2.4.1 (#65, Mar 30 2005, 09:13:57) [MSC v.1310 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information.

+DjanGo SVN 1587

1. LiClass1:Hollo world!

  • 果然有挫折!
    1. 安装 0.90 版本,没有木头所言 manage.py

    2. 追回一步一步学习(一) 一看才明白,要SVN Trunk版本的!呜乎哀哉!你怎么不说清楚哪!

[F:\zDevelop\_Zoomq\Django\tryfirst]py manage.py runserver 
Validating models...
0 errors found.

Starting server on port 8000 with settings module 'tryfirst.settings'.
Go to http://127.0.0.1:8000/ for Django.
Quit the server with CONTROL-C (Unix) or CTRL-BREAK (Windows).

  • 哈哈哈!!有用!
  • apps ???
    1. 使用 Leo 组织一下子,明确项目结构,开始!

  • 为什么?!urls.py 中

        # (r'^tryfirst/', include('tryfirst.apps.foo.urls.foo')),
        (r'^$', 'hollo.index'),
    
  • 看着 example 再尝试

    (r'^$', include('tryfirst.apps.hollo.index')),
    

  • KAO!!也不成?!难道是

    (r'^$', 'tryfirst.apps.hollo.index'),
    

DONE! limodou!! 你为什么不说明白哪!!好歹也测试一下子哪!!!

1.1. 小节

初体验,感觉 Django 的调试信息比KarriGell 还要漂亮哪!! 写应用页面变成了一个应用插件的注册过程,嗯嗯,有些向官僚式的八股文写作了,好!是俺组织标准化KarriGell web 应用的一种示范!

2. LiClass2:加法器?

准备开始玩味 MTV (Model Template View) 按照说明一下子就成功了! 当然,没有使用 LiModou 说的那种 url 声明,追加的是:

(r'^add/$', 'tryfirst.apps.add.index'), 
   

2.1. 调试?!

POST 看起来是个内置对象,想法子输出看一下子!

   1 def index(request):
   2     if request.POST.has_key('a'):
   3         a = int(request.POST['a'])
   4         b = int(request.POST['b'])
   5     else:
   6         a = 0
   7         b = 0
   8     return HttpResponse(text%(a
   9                             , b
  10                             , (a + b)
  11                             ,request.POST
  12                             )
  13                         )

当然的,在充当模板的text 部分要追加</form>debug::%s""" 

  • 唉呀呀??怎么没有输出!?
  • 对了是HTML 页面,可能有问题,看源代码!果然有了...

2.2. 恶搞

哈哈哈!!这样调试可以的话,那未将输出部分修改一下子:

   1     return HttpResponse(text%(a
   2                             , b
   3                             , (a + b)
   4                             ,"dict4ini:%s : %s+%s=%s"%(str(r)
   5                                     ,str(r.a)
   6                                     ,str(r.b)
   7                                     ,str(int(r.a)+int(r.b))
   8                                     )
   9                             )
  10                         )

r 是什么呢?!r = DictIni(values=request.POST) 哈哈哈!使用 LiModou 的 dict4ini 模块!解析一下子dict 为对象,容易引用哪! 可用!是也乎^__^

2.3. URL 规则

没有详细说明下去的,url_conf,不知道是否有Apache mod_rewrite 的神奇? 比如说:http://localhost:8000/foo?action=edit&user=zoomq 可以通过:http://localhost:8000/foo/zoomq/edit 来访问得到?

3. LiClass3:MTV初步

触及 MTV (Model Template View)

  • 设置 T 目录先!
  • 顺手将国际化的设置查明了

    TIME_ZONE = 'Asia/Shanghai PRC'
    LANGUAGE_CODE = 'zh-cn'
    
    居然没有Bei Jing!! 唉呀呀...

刷! 立即就有了; 嗯嗯,从现在开始每个应用都要修改三个文件:

  1. apps 中行动脚本
  2. templates 中输出模板
  3. urls.py 访问入口声明
    • 唉呀呀?这么一说...

          (r'^list/$', 'tryfirst.apps.list.index'),
          (r'^li/$', 'tryfirst.apps.list.index'),
          
      这样一来就可以方便的将相同的活动发布为不同的访问?!
    果然一试就成!赞!!

4. LiClass4:csv输出

进一步的 View操作

获取 request <--> DjanGo <--> response 输出

唉呀呀!简直就是MoinMoin 的页面处置流程哪!

  • row.0|addslashes 管道定向技术哪!-)

  • 神奇哪!! URL 策略发挥了作用!
  • 不过,跟多个行为产生了关联有点混乱的说...
    1. Context 对象是 DjanGo 内含特定的处理对象;

    2. Context 对象实例必须是字典
    3. Context 对象的字典关键字将用以在模板中进行引用的
    4. response = HttpResponse(mimetype='text/csv')
      response['Content-Disposition'] = 'attachment;filename=%s.csv'filename
      
      两句约定了下载时的文件名
    5. 实际数据输出还是response.write(t.render(c))完成渲染

4.1. 小节

呜乎哀哉...理解,还是不管细节,成功就好? 现在开始是个分水岭了...


  • 数据可以组织为字典,但对于每个对象,却仍然可以调用它的方法。比如 a 有一个 getname 的方法,可以在模板中这样 {{ a.getname }}。因此django有一种调用的策略,非常灵活。 -- limodou