最近自学了下Django,这里笔记下学习记录。
CONTENTS
备注:
1 学习记录中的代码和资料参考自网络教程【 http://djangobook.py3k.cn/2.0/ 】和【 http://www.djangobook.com/en/2.0/ 】,版权归原作者所有。
2 小弟第一次接触到Django,本笔记可能有错误,还请各位路过的大牛们给予指点。
3 由于教程年代比较久远了,而且Django不同版本改动很大,这里作者的学习笔记是基于【 python2.7.8 + django1.6.5 】实现的。
4 由于时间关系,学习记录里有的地方记得比较乱,以后有时间再整理下吧。
静态URL:
首先在目录下新建一个文件【 MyViewControllers.py 】,内容如下:
from django.http import HttpResponse def showhello(request): return HttpResponse("Hello world");
然后修改下【 urls.py 】,将访问路径showhello路由至指定目录。
由于文件夹关系较乱,这里贴下截图:
搞定之后,无需重启Django,Django会自动检测代码变更,直接访问【 http://127.0.0.1:8000/showhello/http://127.0.0.1:8000/showhello/ 】,可以看到效果了。
注意这里的正则表达式解析:‘^showhello/$’,即必须以showhello/ 结尾。如果正则表达式为r’^showhello/’,不带【 $ 】,那么表示只要含有【 showhello/ 】即可。比如http://127.0.0.1:8000/showhello/1 或者http://127.0.0.1:8000/showhello/ddd 或者http://127.0.0.1:8000/showhello/ 都可以访问。
关于这个正则表达式,教程解释如下:
Django在检查URL模式前,移除每一个申请的URL开头的斜杠(/)。 这意味着我们为/hello/写URL模式不用包含斜杠(/)。 模式包含了一个尖号(^)和一个美元符号($)。这些都是正则表达式符号,并且有特定的含义: 上箭头要求表达式对字符串的头部进行匹配,美元符号则要求表达式对字符串的尾部进行匹配。最好还是用范例来说明一下这个概念。 如果我们用尾部不是$的模式’^hello/’,那么任何以/hello/开头的URL将会匹配,例如:/hello/foo 和/hello/bar,而不仅仅是/hello/。类似地,如果我们忽略了尖号(^),即’hello/$’,那么任何以hello/结尾的URL将会匹配,例如:/foo/bar/hello/。如果我们简单使用hello/,即没有^开头和$结尾,那么任何包含hello/的URL将会匹配,如:/foo/hello/bar。因此,我们使用这两个符号以确保只有/hello/匹配,不多也不少。你大多数的URL模式会以^开始、以$结束,但是拥有复杂匹配的灵活性会更好。 你可能会问:如果有人申请访问/hello(尾部没有斜杠/)会怎样。 因为我们的URL模式要求尾部有一个斜杠(/),那个申请URL将不匹配。 然而,默认地,任何不匹配或尾部没有斜杠(/)的申请URL,将被重定向至尾部包含斜杠的相同字眼的URL。 (这是受配置文件setting中APPEND_SLASH项控制的,参见附件D。) 如果你是喜欢所有URL都以’/’结尾的人(Django开发者的偏爱),那么你只需要在每个URL后添加斜杠,并且设置”APPEND_SLASH”为”True”. 如果不喜欢URL以斜杠结尾或者根据每个URL来决定,那么需要设置”APPEND_SLASH”为”False”,并且根据你自己的意愿来添加结尾斜杠/在URL模式后.
备注:
看网络教程时,发现很多人栽倒在了目录和import上。这里作者笔记下自己的看法,可能有错误~~:
打开【 D:\Documents\pythons\HelloDjango\HelloDjango 】下的settings.py文件,有如下内容:
# Build paths inside the project like this: os.path.join(BASE_DIR, ...) import os BASE_DIR = os.path.dirname(os.path.dirname(__file__))
通过注释我们可以知道,原来该工程的根目录【BASE_DIR 】是【 D:\Documents\pythons\HelloDjango\ 】,即settings.py所在目录的上一层目录,同时也是manage.py的所在目录。因此,这里从项目根目录以及【 python manage.py runserver 】的视角来看,MyViewControllers.py的路径为【 HelloDjango.MyViewControllers 】,即import时的绝对路径。
动态URL:
在urls.py中增加URL解析:
url(r'^shownum/(\d+)/(\d+)/$', shownum),
在MyViewControllers.py中增加函数:
def shownum(request, firstNumStr, secondNumStr): res = "NumInput 1st:" + firstNumStr + " 2nd:" + secondNumStr; return HttpResponse(res);
这里注意有两个正则表达式解析,解析值会对应于shownum的参数。如下图:
然后我们可以访问地址看下效果:
如何简单调试Django:
如果我们想调试下shownum怎么实现呢,很简单,在return语句之前加上一句【 assert False; 】,即让强制让程序出错。刷新页面如下图:
可以看到,里面的信息是非常丰富的,非常利于debug。
备注:
1 捕获值可以认为是字符串类型。
2 教程网址上的评注很有意思,这里截取几个开心下~:
发表评论