当前位置: 首页 > wzjs >正文

南宁企业建站系统下载京东商城网上购物

南宁企业建站系统,下载京东商城网上购物,网络营销服务的特点有,优化模型的推广文章目录 1 django的路由调度流程2 路由配置的语法2.1 基本语法2.2 捕获路由中的参数2.3 路径转换器2.4 正则匹配2.5 自定义路径转换器2.6 传递额外参数给视图函数 3 路由分发4 反向解析4.1 模板层使用url标签4.2 视图中使用reverse函数4.3 模型的get_absolute_url方法4.4 URL命…

文章目录

  • 1 django的路由调度流程
  • 2 路由配置的语法
    • 2.1 基本语法
    • 2.2 捕获路由中的参数
    • 2.3 路径转换器
    • 2.4 正则匹配
    • 2.5 自定义路径转换器
    • 2.6 传递额外参数给视图函数
  • 3 路由分发
  • 4 反向解析
    • 4.1 模板层使用url标签
    • 4.2 视图中使用reverse函数
    • 4.3 模型的get_absolute_url方法
    • 4.4 URL命名空间
      • 应用命名空间
      • 实例命名空间


django项目在创建时,会自动创建一个名为urls.py的文件。这个文件的作用是配置django应用程序的路由,其中包含了URL模式到视图函数的映射。

官方文档参考:django URL调度器


1 django的路由调度流程

收到客户端的请求后,django通过如下步骤确定执行哪个视图函数:

  1. django找到根URL配置文件。
    默认是项目目录的urls.py文件。可以通过settings.py文件中的ROOT_URLCONF指定其他配置。
  2. django加载根URL配置文件,找到其中的urlpatterns
    urlpatternsdjango.urls.path()django.urls.re_path()的实例组成的列表。
  3. 遍历urlpatterns中的每个URL模式,当请求的URL匹配到URL模式后停止。
  4. django调用对应的视图,把请求的HttpRequest对象和其中的参数传给视图函数。
  5. 如果没有找到匹配的URL或在匹配期间出现异常,django会调用错误处理视图。

2 路由配置的语法

2.1 基本语法

from django.urls import path, re_pathurlpatterns = [# 基本语法path(pattern, view[, kwargs][, name]),# 正则匹配re_path(re_pattern, view[, kwargs][, name]),
]
  • pattern 匹配请求路径的规则。
  • view 所匹配的路径对应的视图函数。
  • kwargs 字典,用于给关联的视图函数传递关键字参数。
  • name 给url地址起别名,反向解析时用。

2.2 捕获路由中的参数

使用尖括号可以捕获请求URL带的参数,然后传给视图函数处理。

urlpatterns = [path("test/<info>/", view.test_func),
]

/test/abc/会匹配上面的路由,dhango调用函数view,test_func(info='abc')

2.3 路径转换器

捕获参数时,可以在尖括号内加上路径转换器,限制url传来的值的类型,并做对应的类型转换。

urlpatterns = [# '/test/123/'可匹配,调用函数view.test_func(num=123)path("test/<int:num>/", view.test_func),
]

django支持5种类型的转换器:

  • str 默认转换格式,匹配除了路径分割符外的非空字符串。
  • int 匹配0和正整数。
  • slug 匹配字母、数字、横线和下划线组成的字符串。
  • uuid 匹配格式化的uuid。
  • path 匹配任意非空字符串,包含路径分割符。

2.4 正则匹配

在路径配置时使用正则匹配需要使用django.urls.re_path()方法。
正则匹配的格式为(?P<name>pattern),其中name是匹配到的参数名,pattern是正则表达式。
正则表达式匹配不会进行类型转换,会把字符串格式的参数直接传给视图函数。

# 正则匹配
re_path("test/\d/", views.re_group),
# 正则匹配,位置传参
re_path("test/([a-z])/", views.re_params),
# 正则匹配,传关键字参数(视图函数的参数顺序可变)
re_path("test/(?P<letter2>[A-Z])(?P<letter1>[A-Z])/", views.re_keyword),

2.5 自定义路径转换器

可以自定义路径转换器,实现更复杂的需求。
路径转换器是一个类,它需要满足三个要求:

  1. regex属性,用于匹配;
  2. to_python(self, value)方法,用来类型转换;
  3. to_url(self, value)方法,将python类型转换为字符串,用于URL中。reverse()函数反向解析时会用到这个方法。
from django.urls import path, register_converterclass MonthHandler:# 匹配一位或两位的月份regex = "[0-9]{1, 2}"def to_python(self, value):return int(value)def to_url(self, value):# 填充到两位return f"{value:0>2}"register_converter(MonthHandler, "mm")urlpatterns = [path("test/2024/<mm:month>", view.test_func),
]

2.6 传递额外参数给视图函数

urlpatterns = [path("/test/", view.test_func, {"page": 1}),
]

匹配成功时,django调用view.test_func(page=1)


3 路由分发

urlpatterns中可以用include来包含其他的URL配置模块。

urlpatterns = [path("test/", include("test.urls")),
]

请求的URL为"/test/page/12",匹配到"/test/“时,将”/page/12"转发到test.urls模块中的urlpatterns进行匹配。

通常会在各个app里创建各自的URL配置,然后在根路由中包含这些配置。django收到请求时,根据匹配结果把请求转发给app下面的URL配置。

include也可以用来消除路由配置中的冗余:

# 冗余配置
urlpatterns = [path("<user_id>/main/", view.user_main),path("<user_id>/login/", view.user_login),path("<user_id>/history/", view.user_history),
]# 用include消除冗余
user_patterns = [path("main/", view.user_main),path("login/", view.user_login),path("history/", view.user_history),
]urlpatterns = [# 重复使用的模式仅需要写一次path("<user_id>/", include(user_patterns)),
]

被包含的URL配置,会受到父配置中捕获到的全部参数。


4 反向解析

实际项目中,常常需要获取网站某个页面的URL,为用户展示网址或导航。这样的需求要求URL可以自动更新。
django的路由配置是可以双向使用的。既可以从用户请求的URL找到正确的视图,并提取参数,也可以提供视图函数的标识以及它需要的参数来得到它关联的URL。

路由配置的语法中的name属性可以为url起别名,根据别名来动态解析url的过程叫反向解析。
执行反向解析的工具有以下三种:

层级使用方式
模板url标签
视图reverse()函数
模型get_absolute_url()方法

4.1 模板层使用url标签

urlpatterns = [path("test/", views.test, name="test"),
]
<!-- 模板中使用url标签 -->
<a href="{% url 'test' %}">点击跳转</a>

4.2 视图中使用reverse函数

urlpatterns = [path("test/", views.test, name="test"),path("test_reverse/", views.test_reverse),
]
# django_app/views.py
def test_reverse(request):return HttpResponseRedirect(reverse("test"))

访问"/test_reverse/"会跳转到"test/"对应的页面。

reverse()的全部参数:

reverse(viewname, urlconf=None, args=None, kwargs=None, current_app=None)
  • urlconf,指定当前反向解析使用的urlconf模块。
  • args,kwargs,传递给url,填充url中的参数。
  • current_app,指定当前视图函数所在的app(避免不同应用间url命名冲突的影响)。

4.3 模型的get_absolute_url方法

模型类可以定义一个get_absolute_url()方法来告诉django入伙获取访问这个对象的URL。这个方法返回一个字符串,经常使用reverse()实现。

4.4 URL命名空间

一个django项目可以创建多个app,每个app又有很多路由,这些路由之间容易出现命名冲突。
命名空间可以在不同的应用中出现一样的url名称时,正确地实现反向解析。

使用重复的命名时,反向解析查到的会是urlpatterns列表中的最靠后的那个。

命名空间包含两部分:应用命名空间和实例命名空间。

应用命名空间

单个应用的所有实例都是同样的命名空间。即使用app_name关联应用名字。

# django_app/urls.py
app_name = "app1"urlpatterns = [path("test/", views.test_func, name="test"),
]

在视图函数中或模板页面可以通过命名空间:模式的形式在命名空间中查找对应的模式。

def test(request):return HttpResponseRedirect(reverse("app1:test"))

实例命名空间

使用namespace用来标识一个应用的特定实例,主要功能是区分同由一个应用创建的不同实例。

# 项目的总路由 urls.py
urlpatterns = [path('app1/', include('django_app.urls', namespace='one')),path('app2/', include('django_app.urls', namespace='two')),
]

在视图中通过request对象的属性来获取访问的是哪个实例:

def test_reverse(request):return HttpResponseRedirect(reverse("test", current_app=request.resolver_match.namespace))

以上是django框架的路由的内容整理。


文章转载自:

http://EawibiCB.mwkwg.cn
http://WG2Di0Jk.mwkwg.cn
http://xCBKUQse.mwkwg.cn
http://JuRPkL2N.mwkwg.cn
http://aP8XD7QF.mwkwg.cn
http://liTrU7dl.mwkwg.cn
http://GbE0KGrL.mwkwg.cn
http://tbuoP1kd.mwkwg.cn
http://GZvBjmTe.mwkwg.cn
http://DQY3lmxP.mwkwg.cn
http://azFUOsDH.mwkwg.cn
http://fENxt1ae.mwkwg.cn
http://A1sRLh4V.mwkwg.cn
http://OkSxOUmj.mwkwg.cn
http://oYGxsGT7.mwkwg.cn
http://5ut7OxLp.mwkwg.cn
http://rLqajxrI.mwkwg.cn
http://6wwwWmW0.mwkwg.cn
http://Ecu3YPWI.mwkwg.cn
http://oinCaAuF.mwkwg.cn
http://LpRRZl5q.mwkwg.cn
http://gd4pGFhD.mwkwg.cn
http://qJsfhnoD.mwkwg.cn
http://K0lvOPaF.mwkwg.cn
http://vyEwuK03.mwkwg.cn
http://frXLnHqb.mwkwg.cn
http://QdAc4WmA.mwkwg.cn
http://bzPz9ego.mwkwg.cn
http://Tv39vUzI.mwkwg.cn
http://8C1NorQw.mwkwg.cn
http://www.dtcms.com/wzjs/705444.html

相关文章:

  • 做英雄联盟网站的图片素材嘉兴企业网站排名
  • 10个好用的wordpress投票_评分插件杭州谷歌seo公司
  • 焦作维科网站建设公司wordpress虚拟卡密
  • 做任务的阅币漫画网站网页特效 网页素材的网站
  • 如果做微商需不需要开个网站网站如果不备案吗
  • 长春网站建设方案唐山建设信息网站
  • 网站运营与推广方案手机营销软件
  • 金华网站建设方案开发成都微信开发小程序
  • 轻论坛好用的seo软件
  • j2ee只做网站在线代理服务器网站
  • 淘宝价格网站建设深圳外贸公司有哪些公司
  • 学做网站论坛怎么样客户关系管理案例经典
  • 西安制作网站的公司有第1模板网
  • 找人做app网站吗wordpress评论时间
  • 优秀的网站建设推荐上海环球金融中心大厦简介
  • 邯郸网站建设联系电话网站建造免费
  • 自己做网站需要什么技能中山网站建设seo135
  • 网站建设销售工作内容网站的数据库丢失
  • 如何个网站做二维码做柱状图 饼状图的网站
  • 重庆公司网站设计制作怎样做关键词网站连接
  • 一个人如何注册公司优化网站加载速度
  • 网站开发留言板网站主题颜色
  • 网站添加js广告位网页特效代码下载
  • 1 建设网站目的微信扫码登记小程序
  • 石家庄制作网站的公司哪家好wordpress 引用图片
  • 昌平电子网站建设wordpress分享此文章
  • 买个网站域名要多少钱做美团旅游网站多少钱
  • 计算机毕设做网站wordpress 点评主题
  • 钛钢饰品移动网站建设网站中捕获鼠标位置
  • 南昌网站建设优化公司排名建筑公司网站设计思路