python Django框架学习3
Django框架学习3
本文主要学习讲诉django的URL路由机制和视图(views)响应类型
URL路由机制:
在Django中,工程中的全局路由文件以工程目录下的settings.py文件中的ROOT_URLCONF变量指定,如在 云端留言板中,全局路由如图
再来看全局路由文件urls.py中的内容
其中的urlpatterns变量就表示整个工程中的全局路由
该变量的数据类型为列表,由path()或re_path作为元素内容
Django的URL路由流程
在django中,URL路由流程主要分为四步:
1.django查找全局urlpatterns变量 (urls.py)
2.按照先后顺序,对URL逐一匹配urlpatterns中的每个元素
3.当匹配成功时停止查找,根据匹配结果执行对应的处理函数
4.如果匹配结束后没有匹配成功或出现匹配异常,django会进行错误处理
路由path()于re_path的区别
上面提到,路由主要是以path()和re_path()进行表示
path(route , view)
route参数:路径,由URL字符串组成
view参数:处理(视图)函数或include()类
re_path(route , view)
route参数:路径,由正则表达式组成
view参数:处理(视图)函数或include()类
由此可以得出结论,path()主要处理字符串路由;re_path()主要处理正则表达式路由
现在我们来探寻理解路由函数path()中route
path(route , view , kwargs=None , name=None)
route:URL或URL模式,django定义的URL转换语法
view:处理(视图)函数或include()类
kwargs:向处理函数提供额外的参数,以字典形式表示
name:为URL模式的命名
这里提到django中的转换,在django中主要为
<类型:变量名>
如: aa/2018/ 就会于 aa/< int:year >/相匹配
更多的转换格式类型还有:
str
int
slug
uuid
path
注意点:在路由中route无论是以那种形式来进行表达,末尾要以 / 结尾。
路由中的路径说完了,再来看看对应的处理函数views
views主要形式由:处理函数和include()函数组成如图:
前者是处理函数直接调用函数,后者则是include()函数中调用本地路由实现跳转调用对应函数
include()函数具体实现:
在新建的app中同样包含一个urls.py文件,在此文件中,我们实现本地路由,
然后在同工程名app下的urls.py文件中引用,实现全局路由与本地路由的关联。
视图响应类型:
视图函数接受http请求并返回响应,我们为了后期对工程的维护,主要把编写的视图函数写在app中的views.py文件中。视图函数可以返回web文本、页面、重定向、错误、图片等任何内容。视图函数主要是通过HttpResponse、JsonResponse等类表达并响应。
视图响应不区分GET和POST请求。但能通过
@require_http_methods([’’])
来对请求类型进项过滤
django的响应类型
1.HttpResponse类及其子类
2.JsonResponse类
3.StreamingHttpResponse类
4.FileResponse类
HttpResponse类
HttpResponseRedirect
构造函数的参数有一个:重定向的路径。 它可以是一个完整的URL(例如, ‘http://search.yahoo.com/’ )或者不包括域名的绝对路径(如 ‘/search/’ )。 注意它返回 HTTP 状态码 302。
HttpResponsePermanentRedirect
类似 HttpResponseRedirect , 但是它返回一个永久转义 (HTTP状态码 301),而不是暂时性转移(状态码302)。
HttpResponseNotModified
构造函数没有任何参数。用它来表示这个页面在上次请求后未改变。
HttpResponseBadRequest
类似 HttpResponse ,但使用400状态码。
HttpResponseNotFound
类似 HttpResponse ,但使用404状态码。
HttpResponseForbidden
类似 HttpResponse ,但使用403状态码。
HttpResponseNotAllowed
类似 HttpResponse ,但使用405状态码。它必须有一个参数:允许方法的列表。(例如, [‘GET’, ‘POST’] )。
HttpResponseGone
类似 HttpResponse ,但使用410状态码。
HttpResponseServerError
类似 HttpResponse ,但使用500状态码。
实例:
JsonResponse类
返回JsonResponse(data)
实例:
StreamingHttpResponse类
StreamingHttpResponse是将文件内容进行流式传输,数据量大可以用这个方法
FileResponse类
FileResponse(stream)
stream:以流打开的文件
主要是在web端下载文件时使用此类
总结:
这篇短文主要介绍了django框架中路由机制,视图响应的类型。
路由机制:怎么样匹配路由?路径的书写、路径的转换格式?处理函数的两中表达形式?
视图响应的类型:一共有多少返回类型?各类型对应那些不同的事物处理?视图响应区分GET和POST的请求方式吗?可以用上面方式来处理不同的请求方式?