当前位置 博文首页 > Django零基础入门之路由path和re_path详解

    Django零基础入门之路由path和re_path详解

    作者:孤寒者 时间:2021-09-15 18:18

    目录
    • urls.py文件中的path和re_path
      • 1.path的基本规则:
      • 2.默认支持的转换器有:
      • 3.re_path正则匹配:
    • Django中实战使用path和re_path
      • 1.urls.py文件:
      • 2.views.py视图函数文件:
      • 3.效果:

    假设现在有个需求:
      需要通过URL进行参数传递,我们该怎么做呢?
        其中有个方法就是本文要讲的内容——path和进阶版的re_path。

    urls.py文件中的path和re_path

    1.path的基本规则:

    path('test/<xx>/',views.test)
    

    第一个参数——test/<xx>/:使用尖括号(<>)从url中捕获值。包含一个转化器类型(converter type)。没有转化器,将匹配任何字符串,当然也包括了/字符。

    第二个参数——views.test:当前面的url匹配成功后,就会调用后面的视图函数。

    但是有个问题就是使用尖括号从url中捕获的值默认都是str类型,如果我们需要强制要求其为别的类型(比如:int型)该怎么办呢?

    这就用到了转换器!!!

    2.默认支持的转换器有:

    str:匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式<str:xx>int:匹配正整数,包含0。slug:匹配字母、数字以及横杠、下划线组成的字符串。uuid:匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。(这是唯一的!)path:匹配任何非空字符串,包含了路径分隔符 转换器的作用:默认是str转换器:所以如果不设置转换器,那么接收到的一切值都是str字符串格式,如果要改变这个参数类型就使用到了转换器!

    需要注意的是:path中设置的参数名需要和视图函数中调用的参数名一致!!!

    在这里插入图片描述

    一般情况下,使用path即可匹配我们想要的url中的参数。但是,如果要匹配的过于复杂,使用path中的转换器无法解决的时候,就要使用到re_path(实则是使用正则匹配!)

    3.re_path正则匹配:

    如果不做任何限制,浏览器中输入的ULR的地址参数可以任意多,只要包括规定的路径即可成功匹配!
    ——比如:re_path('hello',views.test5),输入路径:127.0.0.1:8000/aaahelloaaaa都可成功匹配哦!

    如果想限制为何path一样的效果——URL中的路径必须一模一样,否则匹配不到,则需要使用正则语法:
    ——比如:re_path('^hello/$',views.test5),就只有输入路径127.0.0.1:8000/hello/才可成功匹配!

    Django中实战使用path和re_path

    1.urls.py文件:

    """dj_test URL Configuration
    
    The `urlpatterns` list routes URLs to views. For more information please see:
        https://docs.djangoproject.com/en/2.1/topics/http/urls/
    Examples:
    Function views
        1. Add an import:  from my_app import views
        2. Add a URL to urlpatterns:  path('', views.home, name='home')
    Class-based views
        1. Add an import:  from other_app.views import Home
        2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
    Including another URLconf
        1. Import the include() function: from django.urls import include, path
        2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
    """
    from django.contrib import admin
    from django.urls import path,re_path                    #导入re_path,使用正则
    from . import views
    
    urlpatterns = [     #主路由
        path('admin/', admin.site.urls),
        path('test/', views.test),    #路径  关联的视图
    
        path('test2/<name>/<int:age>/', views.test2),       #变量默认接收的是字符串形式    改变格式是通过转换器  <int:age>规定所接收的类型为int型
    
    
        re_path('^test3/(?P<bb>[0-9]+)',views.test3)	  # 注意这个格式:test3是路径固定参数, bb是可以接受路径中test3/后面参数的参数(任意0-9的数字)!
    ]
    
    

    2.views.py视图函数文件:

    from django.shortcuts import render
    from django.http import HttpResponse
    
    # Create your views here.
    #视图操作
    
    def test(request):   #函数视图
        return HttpResponse("这里是帅哥")
    
    #url传参(url参数)
    def test2(request,name,age):   #函数视图
        return HttpResponse("我叫%s,今年%s岁"%(name,age))
    
    def test3(request,bb):   #函数视图
        return HttpResponse("哈哈哈")
    

    3.效果:

    在这里插入图片描述

    在这里插入图片描述

    jsjbwy
    下一篇:没有了