zoukankan      html  css  js  c++  java
  • 反向解析

    反向解析

    现在,有十个app,每个都有一千万个a标签,都可以访问到你的 testadd,然后你的产品经理说,我想要改一下 urls 里面的 testadd ,把它改成 test_add,你只用改一下就好了,然后所有的 a 标签,全都访问不到了,这个时候难道要手动去改a标签的 href吗?

    当然不可能,这时候就要用到反向解析了。

    urlpatterns = [
        url(r'^test_add/', views.testadd,name='xxx')
    ]
    

    只用在后面追加上一个 name ,也就是他的别名,然后在前端页面中的 a 标签里的 href 之中,不要直接写url了,改写成如下。

    <a href="{% url 'xxx' %}">222</a>
    

    这里的url将会动态的跟随你 urls 里面的配置更改而更改。

    即使是

    urlpatterns = [
        url(r'/^test_addasdfasfaxvsfqc/(d+)/', views.testadd,name='xxx'),
    

    他也会跟随他一起变成这样。

    前端会用到,那么后端也会有用到,比如当你在重定向的时候, redirect 里面就要写url,这时候不一样,你要首先导入一个reverse模块,跟小白必会三板斧一样,都是从django.shortcuts里导入的。

    from django.shortcuts import render,HttpResponse,redirect,reverse
    

    在函数中:

    def index(request):
         url = reverse('xxx')
         return redirect(url)
    

    先用 reverse 反向解析出url ,然后把url放进去就好了。

    有名与无名分组的反向解析

    无名分组

    也就是说,如果他 urls 里面的url是带正则表达式的,该如何做呢?

    urlpatterns = [
    url(r'^test_add/(d+)/', views.testadd,name='xxx')
    ]
    

    首先按照原本的方式来请求,发现出错,要求你给他一个参数。

    在这之前,来真正的理解一下 什么是 反向解析

    通过 reverse 也好, 通过前端也好,会得到一个结果,只要结果能满足这个表达式,都算反向解析成功。

    现在只用在前端随便加一个数字在后面就可以了,因为这样就能满足这个正则表达式了。

    <a href="{% url 'xxx' 13232 %}">222</a>
    <a href="{% url 'xxx' 2 %}">222</a>
    <a href="{% url 'xxx' 321 %}">222</a>
    <a href="{% url 'xxx' 21313213 %}">222</a>
    

    这时候就算你乱改这个正则表达式:

    urlpatterns = [
    url(r'^test_addafasxfvqv/(d+)/', views.testadd,name='xxx')
    ]
    

    都没关系,前端会随着他的改变而改变。

    通常反向解析后面带的数字都是 主键值

    前端搞定了,那么来该搞后端了

    后端直接访问会报和前端之前一样的错误,需要参数。这时候只需一步:

    def index(request):
         url = reverse('xxx',arg=(1,))
         return redirect(url)
    

    只需要给他加上一个数字就可以了,随便什么数字,我在这里加了一个1.

    有名分组

    url(r'^test_addsajdsjkahdkjasjkdh/(?P<year>d+)/', views.testadd,name='xxx'),
            前端解析
        	方式一、
                <a href="{% url 'xxx' 1 %}">222</a>
            方式二、    
                <a href="{% url 'xxx' year=1 %}">222</a>
            
            后端解析
            方式一、
                url = reverse('xxx',args=(1,))
                
            方式二、 
                url = reverse('xxx',kwargs={'year':123})# 不用浪费脑容量去记这种方式了,用第一种就好了
    
  • 相关阅读:
    35美元的树莓派电脑 黑客就偷走了NASA的火星数据
    博客样式保留
    某社交网站XSS小计
    c# WhereIf 扩展
    SQL、Linq、lamda表达式 同一功能不同写法
    tomcat org.apache.coyote.http11.HeadersTooLargeException: 尝试将更多数据写入响应标头,而不是缓冲区中有可用空间。 增加连接器上的maxHttpHeaderSize或将更少的数据写入响应头。
    Maven Dependency Scopes
    为什么mysql中不应该使用utf8编码
    springmvc dispacher中的url-pattern的/和/*区别
    在jsp中java代码中警告Cannot resolve method "XX"
  • 原文地址:https://www.cnblogs.com/chanyuli/p/11723475.html
Copyright © 2011-2022 走看看