django学习记录-url

url的模块化

先介绍下什么叫做url的模块化,我们刚开始学习django框架的时候都是把所有的url都写在主项目的urls.py文件中。但是随着我们的学习我们发现,往主路由中写太多的url映射会导致后期的维护成本很高。所有我们采用url的模块化------也就是在创建的每个app中都定义一个url文件,这个url文件是专门用来映射和该app有关的路由。

主路由
在这里插入图片描述
子路由
在这里插入图片描述

url的命名与反转

这里为什么要给url进行命名呢?
因为比如我们设计Login登入的url路由为login。但是突然有一天你老板需要你把所有的login换成signin,那么这样对你的工作量是非常大的,为了避免这个问题,我们把url进行命名。这样后续操作起来只需要修改最初的路由即可
在路由中加一个name参数
在这里插入图片描述
反转:我们将url进行命名后视图函数是无法取到url的命名的,这时我们需要使用reverse将url进行反转,反转后才能取到。这样我们就能取到命名的url
在这里插入图片描述

应用命名空间和实例命名空间

应用命名空间是针对什么情况出现的呢?
在多个app之间,可能出现同一命名的url,这时候为了避免反转url的时候产生混淆,可以使用应用命名空间。应用命名空间的定义非常简单,只需要在app/urls.py文件中定义一个app_name的变量。
来指定这个app即可
在反转时要加上"应用命名空间名称:命名的url"
在这里插入图片描述
实例命名空间
一个app中,可以创建多个实例,可以使用多个url映射同一个app,所以这就会产生一个问题。以后在做反转的时候,如果使用应用命名空间,那么就会发现混淆。为了避免这个问题,我们使用实例命名空间。实例命名空间的定义也非常简单。只要在Include函数中传递一个namespaces的参数即可
使用这种方式获得namespace
在这里插入图片描述

include,re_path,reverse函数详解

include函数的用法主要有三种
1.include(model,namespace=None)
mode:子url的模块字符串
namespace:实例命名空间,这里有一点需要注意,如果使用实例命名空间那么必须先定义好应用命名空间
2.include((pattern_list,app_name),namespace=None)
include的第一个参数可以是一个字符串也可以是一个元组,如果为字符串,则属于上述的情况
如果为元组,则第一个参数代表子url的模块字符串,第二个参数代表应用命名空间。也就是说应用命名空间可以在app/url文件下指定,也可以在include函数中指定
3.include(pattern_list)
Include同时可以自己实现urls的分模块化
在这里插入图片描述
re_path
这个函数没有太多可以解释的,简单来说就是使用正则表达式来匹配url,和path函数唯一的区别也就在这。需要对正则表达式非常熟练才能使用。
reverse
这里我们反转url的时候,同时可以在反转url后添加参数进行反转,将参数列表放入参数kwargs中
如果需要查询时只能手动拼接
在这里插入图片描述

自定义Path转换器

我们要实现的需求如下
在这里插入图片描述
在我们使用类型转化的时候,首先是将url的参数传到converters中,先对你输入的url进行转化,然后再将转化后的python类型转化为url
,但是converters内置的类型转换是固定的。有时候需要我们自己去定义一个path转换器
在这里插入图片描述
同时这个代码是需要运行才能使用给的,所以一般把这个代码放在app/converter文件中,同时需要再__init__文件中加入调用代码。
这个代码有三个步骤:
1.定义正则表达式
2.将path路径拆分为python列表
3.将python列表转化为path路径
这样是可以实现我们的需求,在视图函数中定义好传入的变量转换即可

url的默认参数

在这里插入图片描述
我们可以看到类似这样的网站,它的第一页是不会显示get参数的。而get参数是存在的。这时候需要我们定义默认参数
在这里插入图片描述
当访问blog/时,因为没有num参数,所以会匹配到第一个url,这时候就执行blog.url这个视图函数。
而在page函数中,又有num=1这个默认参数,因此这时候就不用传递参数。而如果访问blog/1时,因为在传递参数的时候传递了num,因此会匹配到第二个url,这时候会执行views,page视图函数,然后把传递的1参数传给Page函数中的num

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值