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或者前端请求的路由一定是你想要的路由,在真正上线之前要多加测试,经过自己的思考无问题之后才可以上线。

最新文章

  1. re.S
  2. 孙鑫MFC学习笔记3:MFC程序运行过程
  3. iOS 更改webView文字颜色丶文字大小丶背景色的方法
  4. ——YC,你学到了吗?——学到了学到了
  5. Linux系统使用yum安装nodejs
  6. Entity FrameWork 中使用Expression<Func<T,true>>访问数据库性能优化
  7. 30个非常流行的提示信息插件(jQuery Tooltip Plugin)
  8. [ZZ] GTX 280 GPU architecture
  9. Basic Example of JMX Technology--转载
  10. 学习lamda表达式
  11. sqlcommand循环内使用
  12. table中超长字符串省略号表示两种方法
  13. 内功心法 -- java.util.ArrayList<E> (4)
  14. hibernate从数据库中自动生成
  15. 工频相位无线同步模块PSYN5000系列在高压设备状态检测和局部放电故障定位的应用方案
  16. Feign get接口传输对象引发一场追寻
  17. SQL Server进阶(七)集合运算
  18. Win7 启动修复
  19. Ubuntu18.04 一些好用的扩展
  20. bzoj1239

热门文章

  1. Huffman树及其编码(STL array实现)
  2. 【转】最简单的安装pip的方法
  3. 基于Spring封装的Javamail实现邮件发送
  4. ArcGIS Server 10.1新特性系列---动态图层
  5. Spring--2.Spring之IOC--IOC容器的23个实验(1)
  6. Linux 7.5 SSH服务和SFTP服务分离
  7. 使用C#交互快速生成代码!
  8. 系统升级更新,cocoaPods不可用的问题
  9. MongoDB数据库备份和恢复
  10. [洛谷P4617] [COCI2017-2018#5] Planinarenje