zoukankan      html  css  js  c++  java
  • Django路由匹配

    先抛出一个问题

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'test', views.test),
        url(r'testadd', views.testadd),
    
    def test(request):
        return HttpResponse('test')
    
    def testadd(request,year):
        return HttpResponse('testadd')
    

    当我们访问test的时候,返回的页面内容是 test 没有问题。

    但是当我们访问testadd 的时候,返回的页面内容居然也是 test 。

    这是因为 urls 里面不是单纯的匹配,而是正则匹配。

    并且在这里面搜索顺序是自上而下,一旦找到满足的,后面的就不再执行了,我们输入的 test毫无疑问匹配到了 urls 里的 test ,但是,我们的 testadd 也满足 test 的正则表达,所以也走了这一条,因此我们两次请求的页面都是同一个。

    为此,需要解决这个问题,我们要在他的前面加上斜杆

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'test/', views.test),
        url(r'testadd/', views.testadd),
    

    这就解决了这个问题。

    一个非常重点:我们在浏览器里面输入连接的时候,后缀比如说是 test,没有输入斜杆,最后发现回车之后确实访问到了我们要的界面,而且url后面自动加了一个“/” 。这不是浏览器给我们加的,是Django给我们加的,首先没有加上斜杆的时候,已经在 urls 里面搜索匹配了一次,然后Django发现没有匹配上的,于是他就给我们加了个斜杆,然后才匹配上的,所以这前后一共进行了两次http请求,可以在浏览器的 f12 里面的network里面看,确实是有两次请求,一次成功,状态码是200,一次是失败状态码是302,也就是django给我们自动重定向了,在后面加了个“/“。

    如果想要取消django自动加斜杆的这个机制,可以在 settings 里面修改,在最后面加上一个

    APPEND_SLASH = False #默认是True,所以会加“/”。
    

    现在又有新的问题了,我在发送一个这样的请求 “127.0.0.1:8001/asdfasdfatest/”,没想到结果居然成功了,这是因为正则匹配嘛,里头不还是有个test,依然能够匹配上的,可以推断的是,我们在test/后面乱加东西,也不会影响,依然能够访问到,这显然不是我们要的结果。

    所以,在urls 里面, 前面加尖括号,后面加美元符,就能够解决了,也就是要以这个开头,以这个结尾。

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^test/$', views.test),
        url(r'^testadd/$', views.testadd),
    

    完美解决了。

    url(r'^$', views.home),  # 首页
    url(r'',views.errors)  # 404页面
    

    404页面,也是尾页,不推荐使用,因为在我们我们第一次如果没有加上斜杆去请求 test之类的,会先走一次,这就直接进了404了,都走不了第二次,所以不推荐使用。

  • 相关阅读:
    django变量使用-在模板中使用视图函数中的变量
    django创建app、在视图函数及url中使用参数、url命名、通过redirect实现网页路径跳转
    第一个django项目-通过命令行和pycharm两种方式
    python安装虚拟环境virtualenvwrapper
    装饰器案例由来例子
    转发:python 装饰器--这篇文章讲的通俗易懂
    JVM调优之jstack找出最耗cpu的线程并定位代码
    mysql视图定义、原理、创建、使用
    列表生成 加1四种方法
    【good】在CentOS 6.x上安装GlusterFS
  • 原文地址:https://www.cnblogs.com/chanyuli/p/11722579.html
Copyright © 2011-2022 走看看