关于django.conf.urls的路由匹配问题
1. 问题
目前自己在写一个网站,但是在后端写好api前端请求的时候,无论如何都请求不到对应的python函数上去,于是自己就把对应的url名修改之后就可以了,具体如下:
## 出现问题的代码
from django.conf.urls import url
from .api import log
urlpatterns = [
    url(r'queryLog', log.query_log),
    url(r'queryLogDetail', log.query_log_detail)
]
我在前端请求了queryLogDetail的api之后,发现最终请求的函数到了query_log()函数中去了
2. 解决
有经验的各位如果看到了r之后这应该是正则匹配的问题,为了验证我去找了django.conf.urls的源码,如下:
from django.urls import include, re_path
from django.views import defaults
__all__ = ['handler400', 'handler403', 'handler404', 'handler500', 'include', 'url']
handler400 = defaults.bad_request
handler403 = defaults.permission_denied
handler404 = defaults.page_not_found
handler500 = defaults.server_error
def url(regex, view, kwargs=None, name=None):
    return re_path(regex, view, kwargs, name)
re_path和path的作用都是一样的。只不过re_path是在写url的时候可以用正则表达式,这点大家在源码regex参数中应该可以看出来。
看到这里大家应该知道问题是如何解决了,由于我写的代码是:
url(r'queryLog', log.query_log),
url(r'queryLogDetail', log.query_log_detail)
解决方法一
我请求的api是api/queryLogDetail,由于django的路由匹配是按顺序进行匹配的,也就是说当queryLog匹配成功之后系统就会认为我请求的就是queryLog这个api,从而导致我的api请求报错,解决方法就是将这两个api进行顺序的调换,如下:
url(r'queryLogDetail', log.query_log_detail),
url(r'queryLog', log.query_log)
这个样子就可以暂时解决问题,但是不排除之后写api会出现问题,还有一个解决方法
解决方法二
既然是正则表达式,有想法的各位获取已经想到了解决方法,加上$就可以解决问题了,正则表达式中这个符号表示结尾,于是做了如下修改:
url(r'queryLog$', log.query_log),
url(r'queryLogDetail$', log.query_log_detail)
这样子写的话就可以解决问题
3. 小结
总之,在写django路由的时候要注意正则表达式的匹配问题,一定要确保前端请求的api或者前端请求的路由一定是你想要的路由,在真正上线之前要多加测试,经过自己的思考无问题之后才可以上线。
关于django.conf.urls的路由匹配问题的更多相关文章
- Django的urls(路由)
		
目录 Django的urls(路由) 正则表达式详解 路由匹配(分组匹配) 无名分组 有名分组 反向解析 无名分组反向解析 有名分组反向解析 路由分发 名称空间 虚拟环境 伪静态 Django的url ...
 - Django之urls.py路由配置(URLConf)
		
urls.py路由配置(URLConf) URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 基本格式: Django1.x版本 ...
 - django中django.conf.urls.url函数
		
在urls.py文件中,我们经常会看到类似于这样的代码: urlpatterns = [ url(r'^blog/(?P<year>[0-9]{4})/$', views.year_arc ...
 - django urls路由匹配分发
		
django urls路由匹配分发 一.urls配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对 ...
 - Django视图层之路由配置系统(urls)
		
视图层之路由配置系统(urls) URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个U ...
 - django路由匹配层
		
目录 orm表关系如何建立 一对多 多对多 一对一 django请求生命周期流程图 路由层 路由的简单配置 Django路由匹配规律 分组 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态 虚 ...
 - Django框架——基础之路由系统(urls.py)
		
1.URL路由系统前言 URL是Web服务的入口,用户通过浏览器发送过来的任何请求,都是发送到一个指定的URL地址,然后被响应. 在Django项目中编写路由,就是向外暴露我们接收哪些URL的请求,除 ...
 - Django框架——基础之路由系统(urls.py)11111111
		
1.URL路由系统前言 URL是Web服务的入口,用户通过浏览器发送过来的任何请求,都是发送到一个指定的URL地址,然后被响应. 在Django项目中编写路由,就是向外暴露我们接收哪些URL的请求,除 ...
 - django路由匹配、反向解析、无名有名反向解析、路由分发、名称空间
		
目录 django请求生命周期流程图 1.Django请求的生命周期的含义 2.Django请求的生命周期图解及流程 3.Django的请求生命周期(分布解析) 路由层 1.路由匹配 2.path转换 ...
 
随机推荐
- jSignature签字板保存为图片
			
这是本人的第一篇博客,还不会使用.有些简陋,勿怪! 今天要讲的是使用jquery插件jSignature做一个手写板签字的功能,并将签字笔迹保存为图片. 第一步:环境准备 jquery.jSignat ...
 - matlab读取excel文件中的数据
			
1.读取sheet1中的所有数据 1.1首先我们建立一个sheet表,表名为‘111’ 1.2 默认这些文本以及数字都放在sheet1中,我们将此excel选入当前工作目录(必要步骤), 选入当前工作 ...
 - hexo博客零基础搭建系列(一)
			
文章目录 其他搭建 1.简介 2.安装Node和Git 3.安装Hexo 4.Hexo的目录结构 5.我的版本 其他搭建 不好意思,下面的链接都是CSDN的链接,如果要在博客园看,请点我的分类查看.因 ...
 - JSON小记
			
json: { "1" : "2", "1" : "3" } 在json中如果有重复的key,会取最后一个key的值,如 ...
 - 搞定SpringBoot多数据源(1):多套源策略
			
目录 1. 引言 2. 运行环境 3. 多套数据源 3.1 搭建 Spring Boot 工程 3.1.1 初始化 Spring Boot 工程 3.1.2 添加 MyBatis Plus 依赖 3. ...
 - Spring(一)开篇
			
目录 1.Spring 介绍 2.Spring 框架的演变 3.Spring 整体架构 Core Container Data Access/Integration Web AOP Test 最后 1 ...
 - 干货!SQL性能优化,书写高质量SQL语句
			
写SQL语句的时候我们往往关注的是SQL的执行结果,但是是否真的关注了SQL的执行效率,是否注意了SQL的写法规范? 以下的干货分享是在实际开发过程中总结的,希望对大家有所帮助! 1. limit分页 ...
 - PowerDesigner配置Oracle数据库反向工程
			
PowerDesigner配置Oracle数据库反向工程 作者:Jesai 贴吧:软件频道吧 1. 前言: PowerDesigner是Sybase的企业建模和设计解决方案,采用模型驱动方法,将业务与 ...
 - 神秘常量0x077CB531,德布莱英序列的恩赐
			
本文发布于游戏程序员刘宇的个人博客, 转载请注明来源https://www.cnblogs.com/xiaohutu/p/10950011.html 某天我在优化游戏的算法,在将一个个关键数据结构优化 ...
 - Java框架之SpringMVC 04-视图解析-Spring表单-JSON-上传下载
			
SpringMVC 视图解析 请求处理方法(controller方法)执行完成后,最终返回一个 ModelAndView 对象,即使出现异常也会返回一个 ModelAndView 对象.对于那些返回 ...