学习Python的日子Django(2)

Django
简介视图
主要内容:URLconf、HttpRequest对象、HttpResponse
1)视图接受Web请求并且返回Web响应
2)视图就是一个python函数,被定义在views.py中
3)响应可以是一张网页的HTML内容,一个重定向,一个404错误等等
4)在http请求中产生两个核心对象,所在位置是,django.http:
    http请求:HttpRequest对象
    http响应:HttpResponse对象
  这两个对象是由django帮我构造的
URLconf相关概述
在settings.py文件中通过ROOT_URLCONF指定根级url的配置
urlpatterns是一个url()实例的列表,我们把它称为路由,它里面的每一个url()我们称为路由配置
一个url()对象包括:
正则表达式
视图函数
可选参数
名称name
编写URLconf的注意:
若要从url中捕获一个值,需要在它周围设置一对圆括号
不需要添加一个前导的反斜杠,如应该写作'test/',而不应该写作'/test/'
每个正则表达式前面的r表示字符串不转义
请求的url被看做是一个普通的python字符串,进行匹配时不包括get或post请求的参数及域名
url路由配置方式
主路由配置
所谓主路由,就是我们项目设置文件夹当中和settings.py文件同级的那个urls.py文件里面的urlpatterns,无论我们的网站当中有多少个路由,我们全部把这些路由写在我们的主路由当中,我们称为主路由配置。
子路由配置
1)、在相应的app下,手动创建一个urls.py文件作为子路由配置文件使用,也可以复制主路由配置文件urls.py
2)、把主路由当作调度分发路由的工具,去分发子路由,在主路由当中
include这个方法,会把经过主路由匹配成功后剩下的路径,分发给我们app里面的子路由去处理,它并不是严格匹配,正则是没有结束符$的,第一个参数代表分发给哪个路由配置文件去处理,第二个参数namespace代表反向解析,和url()当中name参数作用类似。
也就是说,如果我们不想主路由配置这个路由,可以将它分发给子路由去配置。一样可以得到我们想要的结果。从上面我们可以有这样一个启发,以后,主路由当中基本上不做url路由配置,仅仅是用来分发子路由用的。而真正的路由是在子路由当中去配置的,它们二者相互配合,就会把我们整个网站的会话路由,模块化进行处理。不但结构清晰,而且维护方便。
以后,我们的路由配置全部都是使用子路由配置,不建议直接主路由配置!
路由传参
未命名正则表达式组传参(位置传参)
命名正则表达式组传参(关键字传参)
我们就通过两种传参方式,使得视图函数获取到请求路径当中所传递的必要信息
URL的反向解析
如果在视图、模板中使用硬编码的链接,在urlconf发生改变时,维护是一件非常麻烦的事情
解决:在做链接时,通过指向urlconf的名称,也就是我们配置的namespace和name,动态生成链接地址
视图:使用django.core.urlresolvers.reverse()函数
模板:使用url模板标签
视图函数
1)本质就是一个函数
2)视图的参数
A、一个HttpRequest实例
B、通过正则表达式组获取的位置参数
C、通过正则表达式组获得的关键字参数
3)在应用目录下默认有views.py文件,一般视图都定义在这个文件中,如果处理功能过多,可以将函数定义到不同的py文件中;但是建议就写在views.py里面,如果逻辑可以区分,可以写在一个新的应用里面。
HttpReqeust对象说明
1)服务器接收到http协议的请求后,会根据报文创建HttpRequest对象
2)视图函数的第一个参数是HttpRequest对象
3)在django.http模块中定义了HttpRequest对象的API
属性
1)path:一个字符串,表示请求的页面的完整路径,不包含域名和请求参数
2)method:一个字符串,表示请求使用的HTTP方法,常用值包括:'GET'、'POST'
3)encoding:一个字符串,表示提交的数据的编码方式
A)如果为None则表示使用浏览器的默认设置,一般为utf-8
B)这个属性是可写的,可以通过修改它来修改访问表单数据使用的编码,接下来对属性的任何访问将使用新的encoding值
4)GET:一个类似于字典QueryDict的对象,包含get请求方式的所有参数
5)POST:一个类似于字典QueryDict的对象,包含post请求方式的所有参数
6)FILES:一个类似于字典的对象,包含所有的上传文件
7)COOKIES:一个标准的Python字典,包含所有的cookie,键和值都为字符串
8)session:一个既可读又可写的类似于字典的对象,表示当前的会话,只有当Django 启用会话的支持时才可用,详细内容见“状态保持”
方法
is_ajax():如果请求是通过XMLHttpRequest发起的,则返回True
QueryDict对象说明
1)定义在django.http.QueryDict
2)request对象的属性GET、POST都是QueryDict类型的对象
3)与python字典不同,QueryDict类型的对象用来处理同一个键带有多个值的情况。
例如:http://127.0.0.1:8000/booktest/?a=1&a=2&a=3
QueryDict对象方法
方法get()
根据键获取值
1)只能获取键的一个值
2)如果一个键同时拥有多个值,获取最后一个值
dict.get('键',default)
或简写为
dict['键']
方法getlist()
根据键获取值
将键的值以列表返回,可以获取一个键的多个值
dict.getlist('键',default)
GET属性
1)QueryDict类型的对象
2)包含get请求方式的所有参数
3)与url请求地址中的参数对应,位于?后面
4)参数的格式是键值对,如key1=value1
5)多个参数之间,使用&连接,如key1=value1&key2=value2
键是开发人员定下来的,值是可变的。
POST属性
1)QueryDict类型的对象
2)包含post请求方式的所有参数
3)与form表单中的控件对应

猜你喜欢

转载自blog.csdn.net/qq_42240071/article/details/80571135
今日推荐