地方门户网站制作中国有没有做的好的网站
- 作者: 五速梦信息网
- 时间: 2026年03月21日 11:27
当前位置: 首页 > news >正文
地方门户网站制作,中国有没有做的好的网站,wordpress设置留言板,秦皇岛手机网站制作价格目录 1. 前言
- 路由定义
- 路由定义整体源码分析 3.1 partial实现path函数调用 3.2 图解_path函数 3.3 最终 4.URLPattern和Pattern的简单解析
- 小结 1. 前言 在学习Django框架的时候#xff0c;我们大多时候都只会使用如何去开发项目#xff0c;对其实现流程并…目录 1. 前言
- 路由定义
- 路由定义整体源码分析 3.1 partial实现path函数调用 3.2 图解_path函数 3.3 最终 4.URLPattern和Pattern的简单解析
- 小结 1. 前言 在学习Django框架的时候我们大多时候都只会使用如何去开发项目对其实现流程并不是很清楚明了。 这篇文章的目的就是带你先从Django最基础的路由层开始剖析底层源码一步一步带你学会Django路由是如何来进行实现的它的底层又是基于什么来完成的。
- 路由定义 若你只想看源码解析请直接跳过当前点 Django的路由定义是在urls.py里面的我们通过两种形式来定义路由 普通路由定义path方法 urlpatterns [path(test/, views.test), ] 第一个参数路径名 第二个参数执行的视图函数 正则路由定义re_path方法 from django.urls import path, re_pathfrom app01 import viewsurlpatterns [re_path(rlogin/(?Pname\d{4})/, views.login), ] 第一个参数路径正则匹配 第二个参数执行的视图函数 补充 我在这里采用的有名分组也就是将后面匹配到的参数传递给login函数并且形参得跟路由定义的分组名一样 加上括号的原因将匹配到的参数传递给视图函数不加的话就不会进行传递只会进行匹配 无名分组没有名字的分组参数将参数传递到函数此时的形参可以任意名字 urlpatterns [re_path(rlogin/(\d{4})/, views.login), ] def login(request, vv):print(vv)return HttpResponse(code) 有名分组顾名思义在进行正则匹配的时候传递一个固定的参数名 语法?P名字 urlpatterns [re_path(rlogin/(?Pname\d{4})/, views.login), ] def login(request, name):print(name)return HttpResponse(code)
- 路由定义整体源码分析 ok 前面上点开胃菜现在才开始正餐了。 从上面可以看出来path和re_path已经帮我们都封装好了我们只需要直接定义就好了前面写匹配URL后面写视图函数 那么此时就会通过我们在网址栏输入的URL来进行相应视图函数的匹配 下面我们来看path函数的内部实现 3.1 partial实现path函数调用 我们通过ctrl 左键点击path函数可以进入到内部源码进行查看如下 path partial(_path, PatternRoutePattern) 这里涉及到partial函数大致说一下 partial可以实现在调用函数之前固定一部分参数并且返回一个新函数 主要用于简化函数的调用从而封装两个具有部分功能相同的函数但部分不同的。提高了代码的可维护性和可读性。 用法
- 参数一原函数
- 关键字参数原函数的关键字参数需要固定的一部分参数 可以从源码中很好的体现这一点 path partial(_path, PatternRoutePattern) re_path partial(_path, PatternRegexPattern) path和re_path的共同方法都是_path都是采用相同的方式进行路由匹配的但是不同的是他们匹配的方式是不一样的 path是普通的匹配但是re_path是通过正则的形式来进行匹配的所以我们通过提前固定好Pattern来实现两个不同的匹配机制这使得代码更有维护性也更方便只需要更改Pattern就可以更换不同的匹配模式。 当然再写path的时候我们所传递的参数最终都会通过partial传递给_path 3.2 图解_path函数 我们先直接来看_path的整体 def _path(route, view, kwargsNone, nameNone, PatternNone):from django.views import Viewif kwargs is not None and not isinstance(kwargs, dict):raise TypeError(fkwargs argument must be a dict, but got {kwargs.class.name}.)if isinstance(view, (list, tuple)):# For include(…) processing.pattern Pattern(route, is_endpointFalse)urlconf_module, app_name, namespace viewreturn URLResolver(pattern,urlconf_module,kwargs,app_nameapp_name,namespacenamespace,)elif callable(view):pattern Pattern(route, namename, is_endpointTrue)return URLPattern(pattern, view, kwargs, name)elif isinstance(view, View):view_cls_name view.class.nameraise TypeError(fview must be a callable, pass {view_cls_name}.as_view(), not f{view_cls_name}().)else:raise TypeError(view must be a callable or a list/tuple in the case of include().) 直接上图通过代码 图解一步一步分析 当然里面有很多其实是不需要的对于我们现在 我们逐步来进行分析并且删除 第一步 直接看黑色的圈起来的部分这部分是判断传递进来的是否有kwargs这个额外参数目前是用不上的可以直接剔除 第二步 这一部分可以看到这里的isinstance是用于判断view是否是列表或者元组 回到开始我们传递进来的path参数是一个视图函数 , 是一个函数所以这部分也可以剔除 path(test/, views.test) 第三步 callable 的作用是判断当前是否为可执行的 函数肯定是可执行的所以会走这一层那么下一层也不需要了 最终 最终我们获得目前的_path函数所需要的内容 def _path(route, view, kwargsNone, nameNone, PatternNone):from django.views import Viewpattern Pattern(route, namename, is_endpointTrue)return URLPattern(pattern, view, kwargs, name) 3.3 最终 可以看到哈我们最终返回了一个 URLPattern(pattern, view, kwargs, name) 也就是URLPattern对象 在URLPattern中又封装了Pattern对象而这个Pattern对象其实就是最开始我们通过partial传递进来的匹配模式 所以最终path函数就是这样的 urlpatterns [URLPattern(Pattern(test/, is_endpointTrue),views.test,) ] 本质上就是一个URLPattern的对象 4.URLPattern和Pattern的简单解析 本质上URLPattern和Pattern都是两个被封装好的类一个是路由整体对象一个是用于路由匹配的匹配模式对象在这里很好的体现了面向对象的封装性在后续维护中我们也能很好的进行修改维护比如我们需要再添加一个匹配模型我们可以另外单独定义一个Pattern类传递给_path这样就可以使用我们自己的模式匹配了。
- 小结 当然本篇文章只是简单介绍了path的底层源码并没有分析具体的匹配过程但下一篇文章会继更新相关的匹配过程。 明白了path的底层本质对于后面我们分析具体的匹配机制会更加轻松。
- 上一篇: 地方门户网站模板网站策划怎么写
- 下一篇: 地方商城网站南京师范大学课程建设网站
相关文章
-
地方门户网站模板网站策划怎么写
地方门户网站模板网站策划怎么写
- 技术栈
- 2026年03月21日
-
地方门户网站模板wordpress一键更新域名插件
地方门户网站模板wordpress一键更新域名插件
- 技术栈
- 2026年03月21日
-
地方房地产网站单位网站制作费用报价单
地方房地产网站单位网站制作费用报价单
- 技术栈
- 2026年03月21日
-
地方商城网站南京师范大学课程建设网站
地方商城网站南京师范大学课程建设网站
- 技术栈
- 2026年03月21日
-
地方生活门户网站建设方案分销商城网站开发价格
地方生活门户网站建设方案分销商城网站开发价格
- 技术栈
- 2026年03月21日
-
地方网站名称软件开发工程师需要具备的能力
地方网站名称软件开发工程师需要具备的能力
- 技术栈
- 2026年03月21日






