Django——路由配置

12 篇文章 1 订阅
6 篇文章 0 订阅

目录

1 概念介绍

1.1 视图函数

1.2 主路由

2 实操

2.1 字符串匹配

2.2 path转换器

2.3 正则匹配


1 概念介绍

1.1 视图函数

  • 视图函数是用于接收一个浏览器请求并通过HttpResponse对象返回数据的函数。此函数可以接收浏览器请求并根据业务逻辑返回相应的内容给浏览器

  • 视图处理的函数的语法格式:

    def xxx_view(request[, 其它参数...]):
        return HttpResponse对象
  • 参数:

    • request用于绑定HttpRequest对象,通过此对象可以获取浏览器的参数和数据
  • 示例:

    • 视图处理函数 views.py 

      # file : <项目名>/views.py
      from django.http import HttpResponse
      def page1_view(request):
          html = "<h1>这是第1个页面</h1>"
          return HttpResponse(html)

1.2 主路由

  • settings.py 中的 ROOT_URLCONF 指定了主路由配置列表urlpatterns的文件位置 
  • settings.py 同路径下的 urls.py 主路由配置文件
    # file : <项目名>/urls.py
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        ...  # 此处配置主路由
    ]
    urlpatterns 是一个路由-视图函数映射关的列表,此列表的映射关系由url函数来确定

2 实操

本小节主要是为了介绍路径匹配的实际应用,主要分为三种方法:字符串(硬匹配)、path转换器和正则匹配。

2.1 字符串匹配

该类型匹配比较“暴力”,就是通过路径中的字符串进行硬匹配,简单粗暴。使用方法如下:

  • urlpatterns
    urlpatterns = [
        # http://127.0.0.1:8000/
        path('', views.index_view),
    
        # http://127.0.0.1:8000/page/1/
        path('page/1/', views.page1),
    
        # http://127.0.0.1:8000/page/2/
        path('page/2/', views.page2),
    
        # http://127.0.0.1:8000/page/2003/
        path('page/2003/', views.page2003_view)
    ]
  • 视图函数
    from django.http import HttpResponse
    
    
    def index_view(request):
        html = "<h1>这是首页</h1>"
        return HttpResponse(html)
    
    
    def page1(request):
        html = "<h1>这是编号为1的网页</h1>"
        return HttpResponse(html)
    
    
    def page2(request):
        html = "<h1>这是编号为2的网页</h1>"
        return HttpResponse(html)
    
    
    def page2003_view(request):
        html = "<h1>这是这是编号为2003页面</h1>"
        return HttpResponse(html)

2.2 path转换器

Django有默认自带的path转换器,当然, 您也可以自定义path转换器

  • 用法: <转换器类型:自定义名称>
  • 作用: 若转换器类型匹配到对应类型的数据,则将数据按照关键字传参的方式传递给视图函数。

下面只介绍几种常用的Django自带的path转换器:

      转换器类型       作用
str

除了斜杠 '/' 以外的非空字符串

"v1/user/<str:username>"匹配 /v1/user/jason 

int

匹配0个或任意多个正整数,返回int

"page<int:page>" 匹配 /page/100

slug

匹配由 '-' 或者 '_' 连接的字母或数字的组合

"detail/<slug:sl>" 匹配 /detail/this-is_django

path

所有字符(包括 '/')

"v1/user/<path:ph>" 匹配 /v1/user/a/b/c

uuid

只匹配满足 uuid.uuid4() 这个函数返回的字符串

"detail/<uuid:ud>" 匹配  /detail/5aa2892d-8aaa-4509-89e0-7e11579fa993 

注意:不能与slug同时存在,否则可能会被误匹配到slug

用path转换器记得在视图函数中传递参数

  • urlpatterns 
    urlpatterns = [
    
        # http://127.0.0.1:8000/pageNum/?
        path('page_num/<int:page_number>', views.page_num),
    
        # http://127.0.0.1:8000/v1/users/a/b/c
        path('v1/users/<path:ph>', views.path_view),
    
        # http://127.0.0.1:8000/detail/hello-world
        path('detail/<slug:sl>', views.slug_view),
    
        # http://127.0.0.1:8000/detail/5aa2892d-8aaa-4509-89e0-7e11579fa993
        path('detail/<uuid:ud>', views.uuid_view),
    
    ]
  • 视图函数 
    from django.http import HttpResponse
    
    
    def page_num(request, page_number):
        print(type(page_number))
        html = "<h1>这是编号为%d的网页</h1>" % page_number
        return HttpResponse(html)
    
    
    def path_view(request, ph):
        html = "<h1>path网页:" + ph + "</h1>"
        return HttpResponse(html)
    
    
    def slug_view(request, sl):
        html = "<h1>slug网页:" + sl + "</h1>"
        return HttpResponse(html)
    
    
    def uuid_view(request, ud):
        html = "<h1>uuid网页:" + str(ud) + "</h1>"
        return HttpResponse(html)

2.3 正则匹配

在 path() 函数中用正则表达式分组 (?P<name>pattern) 提取参数后用函数关键字传参传递给视图函数

  • urlpatterns 
    urlpatterns = [
        # http://127.0.0.1:8000/birthday/1996/02/26
        re_path(r'^birthday/(?P<year>\d{4})/(?P<month>\d{1,2})/(?P<day>\d{1,2})$', views.birthday_view),
    
        # http://127.0.0.1:8000/birthday/02/26/1996
        re_path(r'^birthday/(?P<month>\d{1,2})/(?P<day>\d{1,2})/(?P<year>\d{4})$', views.birthday_view)
    ]
  • 视图函数 
    from django.http import HttpResponse
    
    
    def birthday_view(request, year, month, day):
        print(request.path_info)
        html = "<h1>%s年%s月%s日</h1>" % (year, month, day)
        return HttpResponse(html)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值