首页 > 其他分享 >路由相关

路由相关

时间:2024-09-10 13:25:14浏览次数:1  
标签:None name views import path 相关 login 路由

路由分发

image-20230709093829993

研究django admin源码时:

image-20230709094405280

namespace是什么?

  • 无namespace

    from django.urls import reverse
    
    url = reverse("v2")
    print(url)
    
  • 有namespace

    from django.urls import reverse
    
    url = reverse("namespace名称:v2")
    print(url)
    
    url = reverse("namespace名称:namespace名称:v2")
    print(url)
    

问题:什么叫反向生成?

path('login/login/login/login/', views.login, name='login'),

路由本质

关于导入和反射

  • 反射,以字符串的形式去操作对象中的成员。
  • 导入模块

image-20230709100509130

image-20230709100752081

image-20230709100904502

include源码

urlpatterns = [
    path('login/', views.login),
    path('api/', include("apps.base.urls")),
    path('api/', (
        import_module("apps.base.urls"),              # 模块对象 from app.base import urls
        None, 
        None)
    )
]
urlpatterns = [
    path('login/', views.login),
    
    path('api/', include("apps.base.urls")),
    path('api/', (
        import_module("apps.base.urls"),              # 模块对象 from app.base import urls
        None, 
        None)
    ),
    
    path('web/', (
        [
        	path('v1/', www_views.login, name='v1'),
        	path('v2/', www_views.login, name='v2'),
		], 
        None, 
        None)
	),
]

在path执行时,传入的参数种类:

  • 网址 + 函数

  • 网址 + (模块对象,None,None)

    urlpatterns = [
    	...
    ]
    
  • 网址 + (列表,None,None)

path源码

  • 网址 + 函数

    path('login/', views.login),
    
    URLPattern(
        RoutePattern("login/", name=None, is_endpoint=True), 
        views.login, 
        None, 
        None
    )
    
  • 网址 + (模块对象,None,None)

    path('api/', include("apps.base.urls")),
    path('api/', (
        import_module("apps.base.urls"),              # 模块对象 from app.base import urls
        None, 
        None)
    ),
    
    URLResolver(
        RoutePattern('api/',name=None,is_endpoint=False),
        import_module("apps.base.urls"),              # 模块对象 from app.base import urls
        None,
        app_name=None,
        namespace=None
    )
    
  • 网址 + (列表,None,None)

    path('web/', (
        [
            path('v1/', www_views.login, name='v1'),
            path('v2/', www_views.login, name='v2'),
        ], 
        None, 
        None)
    )
    
    URLResolver(
        RoutePattern('api/',name=None,is_endpoint=False),
    	[
            path('v1/', www_views.login, name='v1'),
            path('v2/', www_views.login, name='v2'),
        ], 
        None,
        app_name=None,
        namespace=None
    )
    

所有URL用类和对象嵌套的形式实现:

from django.urls import path, re_path, include
from apps.www import views

from django.urls import URLPattern, ResolverMatch
from django.urls.resolvers import RoutePattern
from importlib import import_module
from apps.www import views as www_views
from django.urls.resolvers import URLResolver

urlpatterns = [
    URLPattern(
        RoutePattern("login/", name=None, is_endpoint=True),
        views.login,
        None,
        None
    ),
    URLResolver(
        RoutePattern('api/', name=None, is_endpoint=False),
        import_module("apps.base.urls"),  # 模块对象 from app.base import urls
        None,
        app_name=None,
        namespace=None
    ),
    URLResolver(
        RoutePattern('web/', name=None, is_endpoint=False),
        [
            path('v1/', www_views.login, name='v1'),
            path('v2/', www_views.login, name='v2'),
        ],
        None,
        app_name=None,
        namespace=None
    )
]

路由匹配源码

1.请求来了

image-20230709105857591

2.路由匹配

image-20230709110040137

image-20230709110114113

image-20230709110212557

3.匹配过程

image-20230709112759005

答疑:多个app的时候,路由分发到不同的app里,如果1个app,有100个路由,能不能按大类功能进行分组。

path('api/user/login/', views.login, name='login'),
path('api/user/logout/', views.login, name='login'),
path('api/user/order/', views.login, name='login'),
path('api/user/info/', views.login, name='login'),
path('api/user/ad/', views.login, name='login'),

关于网址之后的 /

  • APPEND_SLASH = True

    path('login/', views.login, name='login')
    	http://127.0.0.1:8000/login/  成功
    	
    	http://127.0.0.1:8000/login   重定向,GET
    	http://127.0.0.1:8000/login/   
    

    当我们直接访问网址或GET请求访问网址,都会成功,如果是POST请求有问题。

  • APPEND_SLASH = False

    path('login/', views.login, name='login')
    	http://127.0.0.1:8000/login/   成功
    	http://127.0.0.1:8000/login    失败
    	
    path('login', views.login, name='login')
    	http://127.0.0.1:8000/login/   失败
    	http://127.0.0.1:8000/login    成功
    

    严格模式,自己定义是什么就以什么方式访问。

其他

image-20230709120354955

标签:None,name,views,import,path,相关,login,路由
From: https://www.cnblogs.com/sherwin1995/p/18406214

相关文章

  • 说文解字的各种版本总结以及常用的说文解字相关学习网站推荐
    《说文解字》‌是中国乃至世界第一部字典,由东汉经学家、文字学家许慎编著,对中国及世界文字学产生了深远的影响。该书原作于汉和帝永元年间,成书于汉安帝建光元年,共十五卷,其中前十四卷为文字解说,第十五卷为叙目,按部首编排,共分540个部首,收字9353个,另有“重文”(即异体字)1163个,共10516......
  • 鸿蒙界面开发——组件(7):组件导航 & 页面路由
    组件导航(Navigation)(推荐)Navigation()Navigation(pathInfos:NavPathStack)Navigation是路由容器组件,一般作为首页的根容器,包括单栏(Stack)、分栏(Split)和自适应(Auto)三种显示模式。Navigation组件适用于模块内和跨模块的路由切换,一次开发,多端部署场景。通过组件......
  • Nginx相关
    参考:https://juejin.cn/post/7368433531926052874相关命令nginx//启动nginx-sstop//停止nginx-sreload//重新加载nginx-t//检查配置文件的正确性nginx-v//查看Nginx版本ps-ef|grepnginx//查看进程命令moreaccess.log//查看日志Nginx上下文......
  • 两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址
    1.访问位与修改位的题型(淘汰哪一页)访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是......
  • Java代码审计篇 | ofcms系统审计思路讲解 - 篇1 | 环境搭建、路由机制
    文章目录Java代码审计篇|ofcms系统审计思路讲解-篇1|环境搭建、路由机制1.前言2.项目环境搭建3.项目路由机制3.1.1)先搜索pom.xml文件,看看使用了什么框架3.2.2)确定是否是spring的路由机制3.3.3)确定自写路由机制的特点3.4.4)从前端探索3.5.5)断点调试3.6.6)寻......
  • C#-使用Serilog框架快速实现日志及其相关扩展
    目录一、Serilog日志实现1、实现 ILogEventSink接口2、日志类Log3、日志级别LogLevel 4、ILogger接口5、日志服务实现6、日志视图View7、ViewModel二、功能扩展1、日志扩展方法2、Trace追踪扩展日志3、自动滚动至底部一、Serilog日志实现安装NuGet包:Serilog......
  • django 路由相关
    路由系统1常见操作通俗的语言来表示:URL->函数对应关系2路由源码分析2.1路由定义的本质fromdjango.urlsimportpath,re_pathfromapps.wwwimportviewsfromdjango.urlsimportURLPatternfromdjango.urls.resolversimportRoutePatternurlpatterns=[......
  • windows和Linux上安装nvm及相关配置
    Windows安装:1、详情参考:https://blog.csdn.net/goods_yao/article/details/137854626本文详细介绍了在Windows系统中使用nvm(NodeVersionManager)管理Node.js版本的过程,包括卸载Node.js、nvm的安装与配置、修改npm镜像源、环境变量设置及常见问题解决。 Linux(centos7.6)安装:0、机......
  • 关于用户和用户组的相关命令
    以下命令均是在超级用户(root)下运行的:假设有个普通用户(life)1.期望将他加入到一个新的用户组(group1):​ 目标用户组不存在,可以先创建该组,使用groupadd命令:groupaddgroup1​ 将用户(life)添加到用户组(group1)usermod-aGgroup1life​ 参数的解释:​ -a参数(--append)作......
  • django环境相关
    1.项目相关新项目开发时,可能遇到使用其他的版本。虚拟环境老项目打开项目虚拟环境1.1关于新项目1.系统解释器+命令行【学习】C:/python38 -python.exe -Scripts -pip.exe -pip3.8.exe -django-admin.exe -Lib -re.py -site-pakages -d......