认识django2.0读书笔记(3)---第三章 视图和URL配置

时间:2021-06-26 19:19:42

文档下载地址:Django_2.0_中文教程  http://download.csdn.net/detail/julius_lee/6620099

在线地址:http://djangobook.py3k.cn/2.0/

Django 2.0 Book 关键内容记录,主要是为了帮助记忆和理清整个框架,同时以后忘了可以查看,回想。

1、  创建第一个django页面:

hello world

没有网页框架,直接将helloworld保存在html文档中;django靠view视图和url产生

2、  第一个视图

Views.py中输入

from django.http import HttpResponse

def hello(request):

return HttpResponse("Hello world ")

工作:

导入HttpResponse类,定义hello视图函数,至少需要一个request参数,并返回一个HttpResponse实例

3、  第一个URLconf

绑定视图函数和URLconf

URLconf 的本质是URl模式及与视图函数之间的映射表。即哪个url调用哪个视图函数

步骤:

import mysite/views.py文件中的hello视图,即:

from mysite.views import hello

urlpatterns 变量中添加URLpattern,即:

添加该元组的一个元素,前面是正则匹配,后面是使用的视图函数

注意:

python的搜索路径

首先查找当前目录,文件不存在再查找lib中的package下的文件

URLpattern语法

简而言之,就是匹配首尾,首尾要确定;尾斜杠会自动转换,也可以设置

正则表达式刚学不久,不再重复

根目录用’^$’表示,代表一个空字符串

4、  django处理请求的过程

运行runserver后,manage.py在同一目录下查找setting.py文件,读取配置信息包含template目录,database,ROOT_URLCONF等;ROOT_URLCONF = 'mysite.urls'即指向mysite/urls.py

然后当用户在地址栏访问***/hello时,django装载URLconf,然后匹配URLconf中的URLpatterns,直到匹配成功。匹配成功后就调用view函数,将HttpRequest对象作为第一个参数。

总结一下:

进来的请求转入/hello/.

Django通过在ROOT_URLCONF配置来决定根URLconf.

Django在URLconf中的所有URL模式中,查找第一个匹配/hello/的条目。

如果找到匹配,将调用相应的视图函数

视图函数返回一个HttpResponse

Django转换HttpResponse为一个适合的HTTP response, 以Web page显示出来

5、  第二个视图:动态内容

1)对于views.py

import datetime

def current_datetime(request):

now = datetime.datetime.now()

html = "<html><body>It is now%s.</body></html>" % now

return HttpResponse(html)

导入日期模块

赋值

格式化字符串构造html响应

2)对于urls.py

from mysite.views import hello,current_datetime

urlpatterns = patterns('',

('^hello/$', hello),

('^time/$', current_datetime),

)
导入视图函数

增加URL映射模式映射time

3)URL配置的松耦合原则

即视图函数的实现和URL的返回放在不同地方。视图函数也可以被不同的url重用

6、  第三个视图:动态URL

显示当前时间加上时间偏差量/time/plus/1

常规思路:编写多个url及视图函数

简化方法:

方法一:查询字符串参数,常规方法

方法二:使用通配符,django

编写urls.py

(r'^time/plus/\d{1,2}/$', hours_ahead),#只允许一个或两个数字

编写hours_ahead视图
def hours_ahead(request, offset):

try:

offset = int(offset)

except ValueError:

raise Http404()

dt= datetime.datetime.now() + datetime.timedelta(hours=offset)

html = "<html><body>In %s hour(s), it will be%s.</body></html>" % (offset, dt)

return HttpResponse(html)

说明:

       Request作为HttpResponse的对象;

       Offset是从url中提取出来的,捕获值永远是字符串类型,故需要类型转换。当对非整数进行转换时会出错,报错404;

7、  django的漂亮出错页面

页面出错后会给出大量信息,一般异常信息有:

异常数据类型,异常参数,哪个文件异常,出错的具体行位置

还可以显示模板语法错误

对于django出错页的调试,可以采用插入assert False 来代替平时使用的print语句。

8、本章总结:

以上就包含了视图函数和硬编码的HTML内容。