本节根据案例讲解到urls.py中用到的3个函数 :path() 函数、path转换器、re_path()函数。
案例描述:
访问:http://127.0.0.1:8000/ ---- 页面展示:这是我的首页
访问:http://127.0.0.1:8000/page/1 ---- 页面展示: 这是第1页
访问:http://127.0.0.1:8000/page/2 ---- 页面展示: 这是第2页
开发
(1) urls.py 添加path
from django.contrib import admin
from django.urls import path,re_path
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
# http://127.0.0.1:8000/
path('', views.index_view),
# http://127.0.0.1:8000/page/1
path('page/1', views.page1_view),
# http://127.0.0.1:8000/page/2
path('page/2', views.page2_view),
]
(2) view.py 添加对应的业务处理视图
from django.http import HttpResponse
def index_view(request):
return HttpResponse('这是我的首页')
def page1_view(request):
return HttpResponse('这是第1页')
def page2_view(request):
return HttpResponse('这是第2页')
点击这里运行项目:
在浏览器中输入:http://127.0.0.1:8000/ 展示如下:
在浏览器中输入:http://127.0.0.1:8000/page/1 展示如下:
在浏览器中输入:http://127.0.0.1:8000/page/2 展示如下:
在案例一基础上,浏览器有http://127.0.0.1:8000/page/3–100 进行展示,如果一页对应一个视图函数岂不是崩溃,下面介绍path转换器来进行实现
from django.contrib import admin
from django.urls import path,re_path
from . import views
'''
知识点2:path转换器
'''
urlpatterns = [
'''2、path 转换器使用'''
# http://127.0.0.1:8000/page/3-n
path('page/' , views.pagen_view),
]
views.py脚本
from django.http import HttpResponse
# 参数pg 与urls.py中的page/中参数名保持一致
def pagen_view(request, pg):
return HttpResponse('这是第%s页!' % (pg))
重新运行服务,浏览器输入:http://127.0.0.1:8000/page/100
任意输入整数N,都可以展示对应页。
小练习
下面给出一个小练习,使用path转换器实现一个小计算器。
定义一个路由格式为:http://127.0.0.1:8000/整数/操作字符串[add/sub/mul]/整数
从路由中提取数据,做响应的操作后返回给浏览器
效果如下:
浏览器输入:http://127.0.0.1:8000/100/add/200
页面展示:300
答案:
urls.py中path如下:
# 小计算器
# http://127.0.0.1:8000/整数/操作字符串【add/sub/mul】/整数
path('//' , views.cal_view),
views.py 中视图函数如下:
# 小计算器
def cal_view(request, num1, operate, num2):
if operate == 'add':
result = num1 + num2
elif operate == 'sub':
result = num1 - num2
elif operate == 'mul':
result = num1 * num2
else:
return HttpResponse('Your op is wrong')
return HttpResponse(result)
在案例二基础上,如果要求只能进行2位整数的计算,如何去实现呢?下面介绍re_path()函数。
re_path()函数
作用:在url的匹配过程中可以使用正则表达式进行精确匹配
语法:re_path(reg,view,name=xxx)
正则表达式为命名分组模式(?Ppattern);匹配提取参数后用「关键字传参」方式传递给视图函数
urls.py
from django.contrib import admin
from django.urls import re_path
from . import views
urlpatterns = [
# 小计算器只可算2位整数运算,用re_path() 实现
re_path(r'^(?P\d{1,2})/(?P\w+)/(?P\d{1,2})$' , views.cal2_view),]
views.py
def cal2_view(request, x, op, y):
html = 'x:%s op:%s y:%s' % (x, op, y)
return HttpResponse(html)
如果输入3为整数,当urlpatterns中不包含案例二的路由时,浏览器会报错;当urlpatterns中包含案例二的路由时,会从上到下去匹配路由,匹配不上2位整数的会找到案例二的路由尽心计算。