现在不做过多阐述,只对于tutorial学习前三个向导做一下补充,也是自己做的时候的一些错误记录
在tutorial 1 中 (https://docs.djangoproject.com/en/1.5/intro/tutorial01/),对于教程有几点补充的部分
(1)如何终止 runserver ?
例子中如下命令启动runserver
python manage.py runserver
看terminal中写道终止Server 是快捷键 Ctrl + C ,我按了例子去做,大多数情况是终止不了的,这个只是终端终止某些命令的操作,实际操作并不适用。那么是不是已经终止了呢?我们再运行一下试试!
显示端口被占用,说明刚才那个server,并未终止,在浏览器上运行网址,有可能正常显示,也有可能需要很长时间加载,一直加载未反应。
解决办法:
1. 换用新的端口运行、
python manage.py runserver 8001这个方法确实可行,但是在程序过程中有时候需要重启server,频繁的换端口,看起来并不好。
2. 结束进程
找到端口的进程,并且结束它
linux 命令 : ps -aux|grep 8000 这个命令搜索8000端口的进程,或者搜索manage这个命令 ps -aux|grep manage
在这里面可以看到机器运行的诸多含有 manage 的命令所占的进程,主要查看
python manage.py runserver 所占的进程,看图中有4个 实际上我只运行了两次,每次运行这条命令实际是调用 /user/bin/python 的 所以只需要结束 这个所占用的进程编号就可以了
注意:直接kill pid 可能结束不了,带上 -9 强制结束进程, kill -9 pid 这样你的runserver 就被kill了。
(2) __unicode__ 函数有毛用?()
在看着教程之中一直不知道 __unicode__ 有什么用,官方解释是说
还是没有给出实际的例子说明白,unicode 究竟是干嘛的,在java里面 对于网络传输的数据都进行unicode编码,在这个里面看起来有点多此一举的样子。于是我就实验了一下
在程序输出的时候
__unicode__ 方法 相当于toString
在程序直接输出 Poll 一个对象的时候,显示的是这个,如果按照原来教程的例子,显示的是对象的一个属性,大概 __unicode__ 就像是java 对象中的toString 方法,在java里面直接打印一个对象如果你事先没有复写toString 方法打印的是对象的时间物理地址,这个在java调试的过程之中可以测试。
(3) django模板,url调用过程
1. url的调用
第一步,在这个例子之中,先检索 mysite 的 url.py 的模板目录匹配,也就是先匹配更目录,polls/admin 即mvc 中的model部分
第二部,更加用户访问的模块,匹配相应模块的 url.py部分。如:访问polls/1 则在polls/url.py中配置
这个有较大的自由度,用户可以更加自己的意愿分别对url进行相应的配置,只要符合规则,任意的url均可以访问,这个对比 php的 zend framework 和 C# (不知4.0怎样)自由度比较
大,就拿zend 吐槽一下吧。
看zend 的配置吧,虽然灵活度比较高 在模块的 config里面,看看它的配置
想屎吧,对于轻量级的php网站来说,zend framework 但从url分派上面,就恶心人,看见实例的array array array 嵌套,这种嵌套还算是最简单的嵌套。我想 zend framework 3 今后可能简化这个复杂的操作,最后一切都要归为最简单。
在此有一个小疑问:Poll_id 有什么用?
解释是,用户看的是正则表达式,实际上django调用了 detail函数 传递的是 poll_id
查看view.py 正好也验证了这个说法,
这些函数返回给视图的就是两个参数 httpResonse poll_id
参数name 有什么用?
自己试验了一下,即使不传递name,也正常工作,就行html有的标签的别名一样
上述的两个参数看似都没有用,当你在看到 tutorial 03 时候,有一个模板上面的 函数让我迷糊不解
教程的意思说的是,在模板里面直接使用 /polls/ 耦合度太高,如果这个url 很多,或者发生变动就不好了,意思大概是解耦,最好不要用这种做法。 提倡的是用 {% url %}取而代之。在这里面没有详细说明模板里面的url的作用。
自己测试了一下 这个里面的 url 大概就是 reverse的意思.需要注意的是, 'detail' 这个不是函数名称,而是最初 url.py的 name, 之前如果没有设置name,在这里面是不行的。第三个参数 poll.id 就是最初里面的 <poll_id> 这个函数的结果返回的是, 返回details 的url ,reverse 一下,可以自己测试一下 {% url 'detail' poll.id %}
/polls/1/details/
(2)模板的调用也大致相同,也是先调用 mysite 目录的templates文件的模板,然后分发调用子模块的模板,这个很容易理解。
(3)参数传递
在程序返回给视图,传递的参数需要时字典,直接传递参数 poll_list列表是不可以的。可以自己试试
(4)调试,log输出
自己在测试的时候,发现print 除了模板页显示,其它部分不显示,后来发现可以在terminal 看到
而且 terminal里面的信息,有时候比浏览器的信息更加准确看到出错的位置。对于loging 应该有比较给力调试方式,今后再列出
对于教程就先写到这里。这是看完前三个,记录的一些小问题。
没有评论:
发表评论