• Django之路由系统


    Django之路由系统

      写路由是因为项目的业务线多多个,为了划分管理和方便去维护,所以会将不同的业务放在不同的APP里,每个APP对应不同的url,便于管理维护。

    1、一一对应的路由:一个URL对应一个函数

    /login/ ---> def login(request)   

    2、动态路由:如果是在编辑的情况的下,url中是可能会有?符号,这意味着是GET请求,如果不要url体现?符号,就可以使用动态路由的正则匹配。

    /login/(d+)/  ----> def login(request,a)
    #正则表达式 ------------- 参数a是用来接收正则的
    /login/(?p<a1>w+)/(?p<a2>w+) -----> def login(request,a1,a2)
    #(?p<a1>w+) 的好处是不用位置传参,将w+的值给a1.

      动态路由第一种用法:

       URL 的写法:

        url('test3/', views.test3),
        url('test4/(w+)/', views.test4),

      test.html 的页面:

    <body>
        <ul>
            {% for user in user_list %}
                <li>{{ user }} | <a href="/edit/{{ user }}/">编辑</a></li>
            {% endfor %}
        </ul>
    </body>

      test3 和 test4 的 views.py:

    def test3(request):
        user_list=[
            "george","jack","tony"
        ]
        return render(request,"test.html",{"user_list":user_list})
    
    def test4(request,a1):
        """
        url不是GET传参,所以函数也不能用GET去拿取值
        :param request: a1的值是url中w+的值
        :return:
        """
        print(a1)
        return HttpResponse("....")

      页面url效果:

      

       总结:这个正则的方式是可以写多个的,但是在函数中,要加与其对应的参数,比如a2,并且,这种方式的写法是位置传参。

    3:终止符 '^....$':

    '^login$'   

    4:伪静态(html):html就是伪静态

     伪静态:在访问网址时,静态网址要快于动态网址,所以加伪静态可以提高响应效率。

    ^login/(?p<a1>w+).html$

    5 路由分发:

      在项目名的urls中用include方法,将路由分放,使每个文件件的路由关系独立。

    from django.conf.urls import url,include
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^app01/', include('app01.urls')),
    ]

     这样,app01文件夹下的url就可以独立了

     app01中的url就要加上app01的路径。

     在app01中的urls.py中

    from django.conf.urls import url
    from app01 import views
    
    urlpatterns = [
        url(r'^login.html$',views.login),          
    ]

     在app01的views中加login

    def login(request):
        return HttpResponse("ok")

     也可在项目名中的url中,定义错误页面

    def default(request):
        return HttpResponse("404 Not Found")

     在项目名的url中设置默认页面: 

    url(r'^ ', views.default)

     这样就默认页面是index函数的相关数据了。

    6:路由别名反向生成URL(给URL的关系命名)

      在url后加name,可以通过name反向找到url。

     url(r'^index/',views.index,name='n1'),

     在views中导入 reverse 反转。 

    from django.urls import reverse
    
    def index(request):
        user_list = [
            "wang",
            "george",
        ]
        
        v = reverse("n1")
        print(v)
        #这个v就是url:index

      在url中使用正则:

    r'^index/(?P<a1>w+).html$'
    
    在函数中,def index(request,a1):

      在reverse中加:  

    v = reverse('n1',args=(1, ))   #数字1,不固定,写几都行。

      这样写的效果就是:

    在url中,无论index的后面加什么,在后端的index中,都为1。   /index/1/

      在用正则时要注意的是: 

    (w+) 的 reverse中为args(xxxx, )
    (?p<a1>w+) 时,reverse中为kwargs={"a1":11111}
    v = reverse("n1",kwarge={"a1":1111})

      在前端中,也可以用别名:

    <from method="POST" action='/login/'>
    '/login/' ----> 也可以写成  "{% url "n1" %}"    
    这时,前端的别名会去反向生成url。
    <from method="POST" action="{% url "n1" %}">

      在url中是:

    url(r'^login/', views.login,name="n1")

      在前端的for中的写法:

    {% for i in user_list %}
        <li>{{ i }} | <a herf="{% url "n1" i %}"> 编辑 </a></li> 
    {% endfor %}

    --------- END --------

  • 相关阅读:
    IReport问题整理
    超出打开游标的最大数的原因和解决方案【131101】
    【131031】rel 属性 -- link标签中的rel属性,定义了文档与链接的关系
    【131031】html:hidden的使用
    <jsp:include>和<%@include file=""%>区别【131031】
    【131031】<meta http-equiv=...> 的功能
    【131031】asp.net <%%>&<%#%>&<%=%>&<%@%>&<%$%>用法区别
    python面向对象(类的成员及类方法)
    python网络编程知识体系
    python面向对象(类和对象及三大特性)
  • 原文地址:https://www.cnblogs.com/george92/p/8505162.html
Copyright © 2020-2023  润新知