目录
应用
中views.py
文件中的函数HttpRequest对象
,还可能包含下参数如
HttpResponse对象
或子对象
作为响应
JsonResponse
HttpResponseRedirect
HttpRequest
,进行逻辑处理,返回Web响应HttpResponse
给请求者
HTML内容
,404错误
,重定向
,json数据
...视图的处理过程:
使用视图时需要进行两步操作,两步操作不分先后
应用/views.py
中定义视图
应用
的views.py中.请求信息
.对象
,包含返回给请求者的响应信息
.需要导入HttpResponse
模块 :
from django.http import HttpResponse
定义视图函数 : 响应字符串‘这是我的第一个视图’
给客户端
- from django.shortcuts import render
- from django.http import HttpResponse
-
- # Create your views here.
-
- def index(request):
-
- return HttpResponse('这是我的第一个视图!')
打开views.py输入上述代码
查找视图的过程 :
1.请求者在浏览器地址栏中输入URL, 请求到网站.
2.网站获取URL信息.
3.然后与编写好的URLconf逐条匹配.
4.如果匹配成功则调用对应的视图.
5.如果所有的URLconf都没有匹配成功.则返回404错误.
URLconf入口
ROOT_URLCONF = 'bookmanager.urls'——>是默认的的URLconf入口
URLconf入口可以根据自己的需求修改,但一般都默认使用
完成URLconf配置分为两步:
1.在应用
中定义URLconf
首先,在应用目录中新建一个urls.py文件,在文件中导入相关的模块代码如下:
- from django.urls import path
- from book.views import index
-
- urlpatterns = [
- path('', index)
- ]
2.在项目
中定义URLconf
打开项目中的urls.py,文件已有admin的url,所有我们可以直接访问到站点管理
在【urlpatterns】列表中我们可以定义添加我们的URLconf,在注释中,有提供我们如何添加url的参考例子,添加后的代码如下:
- from django.contrib import admin
- from django.urls import path,include
-
- urlpatterns = [
- path('admin/', admin.site.urls),
- path('index/', include('book.urls'))
-
- ]
当我们完成了配置URLconf的步骤后,我们就能通过运行代码来,访问我们的视图。
运行代码:
打开我们的网址
在搜索框中输入127.0.0.0:8000/index/,就能看到我们设置的视图
初学者一般不能分清两者的区别,所这简单介绍下两者.首先,url是Django 1.x中的写法,p在Django2.1中,开始舍弃django1.x中的url写法。
在django2.x中,描写url配置的有两个函数path和re_path.re_path()函数可以看做是django 1.x中得url函数,即可以在路径中使用正则.
在settings.py文件中有一个ROOT_URLCONF设置,设置的是在访问网址时通过哪一个url文件去匹配所请求的网址
url参数
url或者re_path要复杂一些 (r'^blog/(?P[0-9]{4})/′)首先需要开始符和结尾符 ') 首先需要开始符^和结尾符 ′)首先需要开始符和结尾符,参数匹配一个 ()就是一个匹配参数,
(?P<匹配的字段名>正则表达式)
进行匹配是不包括get或者post请求方式的参数及域名比如www.qq.com/blog?num=1并不会匹配?后边的字符
可以给request参数设置一个默认值,最常见的分页url,比如
- urlpatterns=[
- url(r'^page/$',views.page),
- url(r'^page(?P
[0-9]+)$' ,views.page) - ]
-
- #views
- def page(request,num='1'):
- pass
自定义错误页面关键字handler400=blog.views.page_no_find
- #urls.py
- …
- handler400=blog.views.page_no_find
参数的使用方法path(‘blog/str:string/') 简单了很多,就是尖括号,前边是str代表参数的类型,后面代表参数的名称
path参数类型
捕获url中的参数需要用到尖括号<> 指定尖括号中的值类型比如int:astr:link这个转换器还有许多类型比如:
int 匹配0和正整数
str 匹配任何空字符串但不包括/
slug 可理解为注释 匹配任何ascii码包括连接线和下划线
uuid 匹配一个uuid对象(该对象必须包括破折号—,所有字母必须小写)
path 匹配所有的字符串 包括/(意思就是path前边和后边的所有)
如果遇上路径和转换器语法都不足以定义的URL模式,那么就需要使用正则表达式,这时候就需要使用re_path(),而非path()。
举例:传递 数字结尾的参数
re_path(r'(\d+)/$',views.peopleList,name='peopleList'),
在定义路由的时候,可以为路由命名,方便查找特定视图的具体路径信息。
1) 在使用include函数定义路由时,可以使用namespace参数定义路由的命名空间,如
url(r'^',include('book.urls',namespace='book'))
命名空间表示,凡是book.urls中定义的路由,均属于namespace指明的book名下。
命名空间的作用:避免不同应用中的路由使用了相同的名字发生冲突,使用命名空间区别开。
2) 在定义普通路由时,可以使用name参数指明路由的名字,如
- urlpatterns = [
- url(r'^$',index),
- # 匹配书籍列表信息的URL,调用对应的bookList视图
- url(r'^booklist/$',bookList,name='index'),
- url(r'^testproject/$',views.testproject,name='test'),
- ]
使用reverse函数,可以根据路由名称,返回具体的路径,如:
- from django.core.urlresolvers import reverse
- #或者
- from django.urls import reverse
-
- def testproject(request):
-
- return HttpResponse("OK")
-
- # 定义视图:提供书籍列表信息
- def bookList(request):
-
- url = reverse('book:test')
- print(url)
- return HttpResponse('index')