Django学习记录(2)Django中的路由管理

Django路由管理

Django的路由管理,由应用文件下的urls.py文件进行管理
所有的路由都放置在urlpatterns中
每一个路由在定义的时候,需要通过路由函数来定义
路由函数,常见的有path,url
path(router,view,kwargs,name) 普通路由的定义
url(router,view,kwargs,name) 支持正则表达式
两者在定义router上有所区别

  • router:即为路由地址,请求地址,不允许以"/"开头,这是一个字符串
  • view:是一个视图函数,由该函数完成路由对应的业务处理
  • kwargs:是一个字典,给view设置额外的参数
  • name:路由的名字 与路由的反向解析有关

Django中路由的分类

- 普通路由
用path函数定义,router是一个普通的字符串。

# 在urls.py中定义到一个跳转到登录页面的路由
from . import views.py
path("login", views.login,name="login")
# 在views.py文件中写login()函数
from django.http import HttpResponse
def login(request):
    return HttpResponse(content="hello world")
# 完成最基本的路由周期

- 参数路由(动态路由)
用path函数定义,router在定义路由的时候使用<[type:]key>设置

# 带参路由
path("detail/<int:pk>", views.detail, name="detail")
# 如果不加type限制 pk默认的格式是字符串
# 带参视图函数
def detail(request, pk):
	return Httpresponse

Django内置了5个类型转换器 converters.py
str 默认的,不能匹配 /
int 代表整数
slug 匹配数字字母下划线和中划线
uuid 匹配符合uuid格式的字符串
path 匹配所有,包括 /
此外,还可以自定义类型转换器
例如定义一个只匹配年份的路由:
1.在应用包下创建一个converters.py文件

from django.urls.converters import IntConverter
# 继承IntConverter父类
class Year_converter(IntConverter):
    regex = r"(19|20)\d{2}"

2.之后在__init__.py文件中导入converters.py和django的converters的类型注册函数

from . import converters
from django.urls.converters import register_converter

# 将自定义的转换器进行注册
# 第一个参数代表自定义的类型转换器,第二个参数代表名字
register_converter(converters.Year_converter, "year")
# 在urlpatterns中使用该类型转换器
urlpatterns = [path("<year:year>", views.year)]
  1. 在views.py中定义year函数
def year(request, year):
    return HttpResponse(content="传入的年份是{}".format(year))

- 正则路由
用url函数定义,router是一个支持正则表达式的字符串
在urls.py中导入包 from django.urls import url
用法跟path类似 常用于模糊匹配
正则路由带参数:
url(r"^detail/(?P<pk>\d+)$", views.detail, name="detail")
- 分布式路由
用于分布将当前路由转到各个模块的urlpatterns进行分布式处理
from django.conf.urls import include

path("cart", include(cart.urls))

- 路由的反向解析
根据路由的name属性查找路由的过程

  1. 在模板中进行路由的反向解析
{% url 'namespace:router_name' param %}
  1. 在视图函数中进行路由的反向解析
from django.shortcuts import reverse

redirect(to="/")
redirect(to=reverse('router_name'))

# 带参路由反向解析 例:
redirect(to='/next/11')
redirect(to=reverse('next', args=(11, 12)))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值