视图
在Django中,通过浏览器去请求一个页面时,使用视图函数来处理这个请求的,
视图函数处理之后,要给浏览器返回页面内容
url匹配
- urlpatterns 是固定写法,它的值是 列表
- 我们在浏览器中输入的路径会和 urlpatterns 中的每一项顺序进行匹配
如果匹配成功,则直接引导到相应的模块
如果匹配不成功(把urlpattersns中的每一个都匹配过了),则直接返回404
- urlpatterns中的元素 是 url ,url的第一个参数是:正则
r 转义 ^ 严格的开始 $ 严格的结果
- 我们在浏览器中输入的路由 中 哪些部分参与正则匹配?
http://ip:port/path/?key=value, 其中的//ip:port/ 和 get post 参数不参与正则匹配
- 如果和当前的某一项匹配成,则引导到子应用中继续匹配,
如果匹配成功,则停止匹配返回相应的视图
如果匹配不成功,则继续和后边的工程中的url的每一项继续匹配,直到匹配每一项
视图函数的使用
1.定义视图函数
视图函数定义在views.py 中
视图的必须有一个参数,一般叫request,视图必须返回HttpResponse对象,HttpResponse中的参数内容会显示在浏览器 的页面上。
from django.shortcuts import render from django.http import HttpResponse # Create your views here. # 1. 定义视图函数,返回HttpRequest对象 # 2. 进行url配置,建立url地址和视图的对应关系 def index(request): # 进行处理,和M和T进行交互... return HttpResponse("这是网页的进行响应")
2.进行url的配置
( 目的建立地址根处理函数之间对应的关系)
一条URLconf包括url规则、视图两部分:
- url规则使用正则表达式定义。
- 视图就是在views.py中定义的视图函数。
需要两步完成URLconf配置:
- 1.在应用中定义URLconf
- 2.包含到项目的URLconf中
① 应用下面新建一个urls.py ,进行配置 注意列表名别写错了;
from django.conf.urls import url from booktest import views # 项目的urls文件 from django.urls import re_path '''通过re_path函数设置url路由的配置项 正则匹配的是视图函数 如果路由里面没有正则,则用 path ''' urlpatterns = [ re_path(r'^index$', views.index), # 建立/index和视图index之间的关系 ]
②在项目的文件夹下有urls.py 文件,进行设置路由的配置项,为urlpatterns列表增加项
from django.contrib import admin from django.urls import path, include, re_path # 项目的urls文件 '''通过re_path函数设置url路由的配置项 包含booktest应用中的urls文件 路由里面没有正则的话就用 path函数 ''' urlpatterns = [ path('admin/', admin.site.urls), re_path(r'^', include('booktest.urls')) ]
3.请求访问
运行程序,访问地址 127.0.0.1:8000/index, 就有视图函数返回的字符串
路由请求的大概过程
请求者在浏览器地址栏中输入url,请求到网站后,获取url信息
然后与编写好的URLconf逐条匹配,如果匹配成功则调用对应的视图函数,
如果所有的URLconf都没有匹配成功,则返回404错误。
例如还有在一个应用中还有其他的视图函数
def index2(request): # 第二个视图函数 return HttpResponse("这是第二个试图函数的响应")
直接在应用的urls.py的路由配置项里面进行添加(前提是这个应用的views.py在整个项目里面已经进行了配置)
注意:$的运用 严格匹配开头结尾, 如果不加的话,访问index2的话就会访问第一个index路由
from booktest import views # 项目的urls文件 from django.urls import re_path '''通过re_path函数设置url路由的配置项 正则匹配的是视图函数 如果路由里面没有正则,则用 path ''' urlpatterns = [ re_path(r'^index$', views.index), # 建立/index和视图index之间的关系 re_path(r'^index2$', views.index2) ]
还有,如果进行路由设计的时候,地址的最后面有斜杠,那么在进行路由配置的时候就要加上