2-Django路由配置

本节根据案例讲解到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/ 展示如下:
2-Django路由配置_第1张图片
在浏览器中输入:http://127.0.0.1:8000/page/1 展示如下:
2-Django路由配置_第2张图片
在浏览器中输入:http://127.0.0.1:8000/page/2 展示如下:
在这里插入图片描述

  • path()函数介绍
    语法: path(route, views, name=None)
    参数:
    1、route: 字符串类型,匹配的请求路径
    2、views: 指定路径所对应的视图处理函数的名称(注意不要加小括号)
    3、name: 为地址起别名,在模板中地址反向解析时使用

案例二:

在案例一基础上,浏览器有http://127.0.0.1:8000/page/3–100 进行展示,如果一页对应一个视图函数岂不是崩溃,下面介绍path转换器来进行实现

  • path转换器介绍
    语法:<转换器类型:自定义名>
    作用:若转换器类型匹配到对应类型的数据,则将数据按照关键字传参的方式传递给视图函数。
    2-Django路由配置_第3张图片
    使用案例:
    urls.py 脚本:
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()函数
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位整数的会找到案例二的路由尽心计算。

你可能感兴趣的:(Django,django,python,后端)