路由层的基本知识

1. 静态路由

1.1 静态路由匹配方式

urlpatterns属性

urlpatterns是路由文件中的一个全局变量,用来存放路由及视图函数的映射关系

用户发起的请求URL都会首先进入主控制目录下的这个urls.py文件中进行查找匹配

  1. 首先找到urls.py下的urlpatterns全局变量,这是一个路由规则实例的列表数据。
  2. 按照先后定义顺序,进行路由匹配。
  3. 找到第一个匹配项时停止匹配,执行匹配到的视图函数。
  4. 遍历完全,未发现匹配,django进行异常处理

其中urlpatterns中的每一个路由映射规则可以由pathre_path进行构造


注意Django的路由不考虑HTTP请求方式,仅根据URL进行路由;即,只要URL相同,无论POSTGET等哪种请求方式都指向同一个操作函数

1.2 path方法

path(str, view, kwargs=None, name=None)

re_path(regex, view, kwargs=None, name=None)

1.3 静态路由

静态路由用来映射对应视图函数,以下是一个简单的例子

from django.http import HttpResponse
def index(request):
    return HttpResponse('Hello Worlds!')  
  
from django.urls import path,re_path
from urlapp import views
urlpatterns = [
    path('',views.index),
    re_path(r"^",views.index),
]

2.动态路由

2.1 动态路由参数传递

有的时候,我们的路由设置不能一直维持一个一成不变的状态;

比如遇到一些内容翻页的场景,那么我们的连接可能是:xx.com/airticle_list/1/、`xx.com/airticle_list/2/
那么这样的路由其实对应的都应该是一个视图函数,用以展示页面内容

def index(request,x,y):
    content = "x:%s\ny:%s" % (x,y)  
    return HttpResponse(content)

定义如上函数,将会接收连接中的后两部份path值作为参数,分别依次给到x和`y

2.2 动态路由转换器

from django.urls import path,re_path
from urlapp import views
urlpatterns = [
    path('<int:x>/<str:y>/',views.index), # 指明类型
    path("<x>/<y>/",views.index), # 不指明类型
    re_path(r"^(?P<x>\d+)/(?P<y>[a-zA-Z]+)/$"), # (?P<name>pattern) 正则分组
    re_path(r"^(\d+)/([a-zA-Z]+)/$"),
]

路由通过尖括号进行分组匹配,使用int以及str内置转换器将连接对应部分的值进行转换;并将匹配到的结果传递到视图函数对应的参数位置上

  • 其他内置Path转换器,可以将我们的路由参数规定为指定类型
'''
str:匹配除了路径分隔符(`/`)之外的非空字符串,这是默认的形式
int:匹配正整数,包含0
slug:匹配字母、数字以及横杠、下划线组成的字符串
uuid:匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00
path:匹配任何非空字符串,包含了路径分隔符
'''

2.3路由分发实现

每个子app都拥有自己独立的urls.py路由映射文件,而主控路由文件里只需要使用include函数导入子app下路由文件即可,这就是路由分发

from django.contrib import admin
from django.urls import path,include
urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include("urlapp.urls"))  # 使用include 实现路由分发,找到子app下的路由文件
]

可以让我们在多个app的项目中更加方便有效的管理每一个路由

3.总结

注意导入函数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值