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的路由匹配问题的更多相关文章

  1. Django的urls(路由)

    目录 Django的urls(路由) 正则表达式详解 路由匹配(分组匹配) 无名分组 有名分组 反向解析 无名分组反向解析 有名分组反向解析 路由分发 名称空间 虚拟环境 伪静态 Django的url ...

  2. Django之urls.py路由配置(URLConf)

    urls.py路由配置(URLConf) URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. 基本格式: Django1.x版本 ...

  3. django中django.conf.urls.url函数

    在urls.py文件中,我们经常会看到类似于这样的代码: urlpatterns = [ url(r'^blog/(?P<year>[0-9]{4})/$', views.year_arc ...

  4. django urls路由匹配分发

    django urls路由匹配分发 一.urls配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对 ...

  5. Django视图层之路由配置系统(urls)

    视图层之路由配置系统(urls) URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个U ...

  6. django路由匹配层

    目录 orm表关系如何建立 一对多 多对多 一对一 django请求生命周期流程图 路由层 路由的简单配置 Django路由匹配规律 分组 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态 虚 ...

  7. Django框架——基础之路由系统(urls.py)

    1.URL路由系统前言 URL是Web服务的入口,用户通过浏览器发送过来的任何请求,都是发送到一个指定的URL地址,然后被响应. 在Django项目中编写路由,就是向外暴露我们接收哪些URL的请求,除 ...

  8. Django框架——基础之路由系统(urls.py)11111111

    1.URL路由系统前言 URL是Web服务的入口,用户通过浏览器发送过来的任何请求,都是发送到一个指定的URL地址,然后被响应. 在Django项目中编写路由,就是向外暴露我们接收哪些URL的请求,除 ...

  9. django路由匹配、反向解析、无名有名反向解析、路由分发、名称空间

    目录 django请求生命周期流程图 1.Django请求的生命周期的含义 2.Django请求的生命周期图解及流程 3.Django的请求生命周期(分布解析) 路由层 1.路由匹配 2.path转换 ...

随机推荐

  1. iOS - 点击背景视图收起系统键盘

    我们在 IOS 开发中经常会需要在输入框输入数据后,需要收起系统键盘,比如由于手机屏幕不是很大,可能由于输入信息后,系统键盘就会遮挡住下一步的按钮,而系统键盘有没有收起键,所以我们可以实现点击背景视图 ...

  2. 构造函数以及关键词this

    Java中所有类都有构造方法,用来进行该类对象的初始化,构造方法也有名称,参数和方法体以及访问权限的设定. 1.构造方法的完整定义格式如下: [public|protected|private]< ...

  3. MySQL插入操作

    说明:value的值可以为数据,DEFAULT,NULL,expr 含有ATUO_INCREMENT的列可以插入DEFAULT.NULL,或者不插入记录来实现自动增长. 插入记录的三种方法:①可以同时 ...

  4. Java类成员之代码块

    代码块含义:使用{ }括起来的代码 代码块类型: 1.局部代码块:定义在方法体中. 2.构造代码块:也叫初始化代码块,定义在类中方法体之外. 3.静态代码块:定义在类中方法体之外,被static修饰符 ...

  5. Visual Studio 2019移除/禁用Live Share按钮

    Visual Studio 2019新增了几个按钮,搜索按钮,Live Share按钮,发送反馈按钮,管理员按钮(即 “Live Share”, “Send Feedback” ,“ADMIN”) L ...

  6. 字符串分类 - hash

    链接:https://www.nowcoder.com/acm/contest/141/E来源:牛客网 题目描述 Eddy likes to play with string which is a s ...

  7. Mysql连接出现时区问题

    错误提示: The server time zone value '¥x¥_¼Ð·Ç®É¶¡' is unrecognized or represents more than one time zon ...

  8. typescript学习笔记(一)---基础变量类型

    作为一个前端开发者,学习新技术跟紧大趋势是必不可少的.随着2019年TS的大火,我打算利用一个月的时间学习这门语言.接下来的几篇文章是我学习TS的学习笔记,其中也会掺杂一些学习心得.话不多说,先从基础 ...

  9. springboot整合@Scheduled定时任务的使用

    1.启动类里面添加注解@EnableScheduling ,例如: @SpringBootApplication@EnableScheduling@MapperScan("com.examp ...

  10. 使用远程接口库进一步扩展Robot Framework的测试能力

    引言: Robot Framework的四层结构已经极大的提高了它的扩展性.我们可以使用它丰富的扩展库来完成大部分测试工作.可是碰到下面两种情况,仅靠四层结构就不好使了: 1.有些复杂的测试可能跨越多 ...