zoukankan      html  css  js  c++  java
  • DjangoAgain_url路由系统

    Django项目的创建

    路由系统

    url和函数之间对应路由关系

    • /login/-> def login():;一一对应的关系
      一条url对应一个页面一个函数

    • get请求自动创建一个url,或者说携带get请求信息的url:
      /xxxx/xxxx/?nid=9527
      URL配置为url(r'^edit/',views.edit),。跳转到某个具体的细节页面就只能用?=的get形式

    SEO(Search Engine Optimization)搜索引擎优化,搜索引擎判定搜索的优先级

    由于以上get请求携带的url,默认判定的SEO比较低(因为这种url的变化比较多)

    所以可以通过/xxxx/xxxx/9527这种类型的传参方式来创建url
    URL配置url(r'^edit/(w+)/',views.edit),
    此时和上面get传参不同,这时候如果需要函数获取值就得在函数里额外定义接收参数的位置

    # url: http://127.0.0.1:8000/edit/ffff/
    
    # urls.py文件中的配置:
    `url(r'^edit/(w+)',views.edit),`
    
    # views.py文件中设置的函数
    def edit(request,a1):
    	print(a1)
        # a1=ffff
        return HttpResponse('.....')
    

    但是实际上我们为了统配这些url(考虑到多个参数)传入视图函数的参数可以使用*args,**kwargs

    1. 按位置传值的url
      url(r'^edit/(w+)/(w+)/(w+),html$',views.edit),
      那么这种传参的方式,是不是一种“按位置传参?”
      这种传参方式,的确是严格按照位置来进行传参的

    2. 按别名传参的url
      url(r'^edit/(?P<a1>w+)/(?P<a2>w+)/(?P<a3>w+),html$',views.edit),
      上述这种定义url的方式,相当于给url中传入的三个参数分别命名
      这时候在视图函数中获取就需要:

    def edit(request,a1,a2,a3):
    	print(a1,a2,a3)
        return HttpResponse('....')
    

    这时候传参就按照url中的别名为准。

    1. 混合使用
      如果同时使用了位置传参和可命名的传参,会比较混乱,老师上课并没有讲一个具体的解决方案,仅推荐统一用法。
      所以就当这种用法不存在,只是一种错误情况

    实践:

    # url1
    url(r'^edit/(?P<a1>w+)/(?P<a2>w+)/(?P<a3>w+)',views.edit)
    
    # views1
    def edit(request,a1,a2,a3):
        print(a1,a2,a3)
        return HttpResponse('....')
    
    # http://127.0.0.1:8000/edit/hello/scott/turbo
    
    #result1
    """
    hello scott turbo
    [12/Jul/2017 17:27:51] "GET /edit/hello/scott/turbo HTTP/1.1" 200 4
    """
    #--------------------------------
    # url2
    url(r'^edit/(?P<a1>w+)/(?P<a3>w+)/(?P<a2>w+)',views.edit)
    
    # views2
    def edit(request,a1,a2,a3):
        print(a1,a2,a3)
        return HttpResponse('....')
    
    # http://127.0.0.1:8000/edit/hello/scott/turbo
    
    #result2
    """
    hello turbo scott
    [12/Jul/2017 17:27:51] "GET /edit/hello/scott/turbo HTTP/1.1" 200 4
    """
    

    小知识点:$终止符固定url匹配

    • 伪静态

    观察一些别的网站,发现他们都是用.html结尾的。
    url(r'^edit/(w+).html$',views.edit),
    这并不是一个真的“html”,这只是一条url正则
    用户发起一个html请求,服务器获得请求之后会直接把请求读到,并不经过模板引擎的渲染(?)直接返回给用户。这种类型的网站我们称作为静态网站。优点就是“快”。
    而动态网站除了经过模板渲染,还可能需要去数据库里获取一些数据,这个交互的过程就使得动态网站的响应过程相对长一些,慢一些。

    携带了这个“.html”会让这个网站的SEO权重更高

    一一对应的路由--------->静态路由

    通过正则匹配获得数据的路由------------>动态路由

    路由分发

    from django.conf.urls import url,include

    作用是,将原来project_name文件夹中的urls.py变成一个根索引节点,发散开去各个对应的应用文件夹中寻找功能模块。
    这样就有条理地分开了一些功能模块的路由匹配,同时也避免了一些正则路由重复的问题。

    实际操作:

    1. 在/project_name/urls.py中添加一个include模块,并且将url指向文件夹中的urls.py文件
    from django.conf.urls import url,include
    
    urlpatterns = [
        url(r'^app01/', include("app01.urls")),
        url(r'^app02/', include("app02.urls")),
    ]
    
  • 相关阅读:
    iOS设计模式:观察者
    Java面向接口编程小例子
    《The DeadLine》(《最后期限》) 读后感
    Codeforces Round #395 Div1的A题Timofey and a tree
    重写和强制转换再调用能编译但不能运行
    Java继承和静态-加载顺序
    C++之pair
    用Java面向对象思想实现一个微博的功能(未完)
    Java对象在内存图示
    Java中OOP对象和引用
  • 原文地址:https://www.cnblogs.com/scott-lv/p/7510968.html
Copyright © 2011-2022 走看看