Django新手上路——路由匹配

Django新手上路——路由匹配 1

1. URL

1.1 定义

URL即统一资源定位符,网络资源的地址,包含对应文件的位置和浏览器对该资源的处理方式。

1.2 格式
schema://host[:port#]/path/.../[?query-string][#anchor]
      
# 栗子:http://zdq.com/index/
  • **schema:**协议,如http,https,ftp等;
  • **host:**地址或域名;
  • **port:**端口号,http默认端口80;
  • **path:**资源路径,用于匹配需要访问的资源;
  • **query-string:**向服务器发送的数据参数;
  • **anchor:**锚点。

2. Django路由系统

2.1 urls.py作用
  • URL加载是从配置文件——urls.py开始的。Django项目中urls.py文件是一张映射表,将项目中申明好的URL模式同相对应视图函数建立映射关系。
  • 通俗来讲,他告诉Django项目,怎么样从URL中的path找到对应的处理方式视图函数views.py)。
  • 只有输入的URL的path与配置文件中的路径参数一致时,才会找到对应的视图函数。举个栗子,下面的urls.py文件匹配到的URL应为http://127.0.0.1:8000/index/
from . import views 
from django.urls import path
urlpatterns = [
 path('index/', views.index)  #调用同目录下views.py文件中的index方法
]

2.2 路由系统流程
  • 收到请求,在URLconf模块(项目目录下的urls.py文件)中查找匹配规则
  • 规则写在变量urlpatterns中;
  • urlpatterns变量是一个列表,其元素为django.urls中函数对象path或re_path,详见下文。
  • 开始匹配
  • 若匹配到,则停止匹配,即匹配结果为映射表中符合条件的第一个映射关系;
  • 若未匹配到则返回状态码404。

3. path匹配

3.1 格式
def path(roule, view, kwargs=None, name=None):
     pass
  • **roule:**必选,字符串,申明匹配规则;
  • **view:**必选,函数对象,定义于views.py,包括对请求的处理方式和视图调度;
  • **kwargs:**可选,字典,额外参数、传递给view;
  • **name:**url的命名。

3.2 传参
# 通常使用<变量名>捕获URL中path的值传给视图 栗如:
urlpatterns = [
     path('index/<stu_id>/', views.index)
  ]
         
# 对应的视图方法必须使用同名参数进行接收,否则报错。
def index(request, stu_id)

3.2 转换器
  • 开发中path函数的参数roule通常需要传递指定类型参数,此时需要用到转换器。

  • 转换器使用
urlpatterns = [
     path('path/<converter:parameter>/', views.view_func)
   ]
  • **converter:**转换器名称(类型);
  • **pamter:**需要捕获的变量名;
  • 若输入的url不满足转换器规则,则匹配失败返回404;
转换器名称匹配规则
int整数
slug字母、数字、下划线、连接符组成的字符串
str除去路径符(/)之外的非空字符串
path非空字符串,允许路径符(/)存在
uuid格式化的uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12)、16进制

  • 举个栗子
#要注意的是:变量名必须在对应的视图函数中加以申明
#此处的stuid与name会在函数index中申明
urlpatterns = [
    path('index/<int:stu_id>/<str:name>/', views.index),
  ]
           
#views.py中的视图函数
def index(request, stu_id, name):
    pass
           
'''
 小技巧:若两个变量转换器类型相同(一般为str),可使用拼接技巧,转换为一个变量。例如:路由表:path('index/<id>-<name>/', views.index),
url: host:8000/index/12-tom,
视图函数: def index(request, id, name):
         pass
'''


4. re_path匹配

4.1 概述

re_path即在path匹配规则中加入正则语法,使匹配机制更加完善且灵活,能够更加切合需求进行匹配。

例如:有一个业务需要通过路径传递月份,需要输入数字在1-12之间,普通的path匹配机制无法做到,虽然可以将数据放到后台去判断处理,但如果在前端可以解决这个问题的话可以降低后台开销。这种需求可以通过re_path来实现。

4.2 格式
#re_path格式为:re_path(r'path/(?P<parameter>re)/', views.function)
urlpatterns = [
     re_path(r'index/(?P<month>[1-9]|1[0-2])/', views.index),
]
# 限制参数month的取值区间是1-12
  • parameter:需要录入的参数;
  • re:正则表达式
4.3 总结
  • url匹配机制只与网址的path部分有关,不管请求是方法是post或get


  1. 东强出品,必数精品 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值