zoukankan      html  css  js  c++  java
  • 路由层

    路由层

    1.Django中路由作用

    URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码对应执行

     

    2.简单配置

    from django.conf.urls import url
    ​
    urlpatterns = [
         url(正则表达式, views视图函数,参数,别名),
    ]
    ​
    -第一个参数是正则表达式(如果要精准匹配:'^publish/$')
    -第二个参数是视图函数(不要加括号)
    -url(r'^admin/', admin.site.urls)

    注意:
      1.若要从URL 中捕获一个值,只需要在它周围放置一对圆括号。
    2.不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^articles 而不是 ^/articles。
    3.每个正则表达式前面的'r' 是可选的但是建议加上。它告诉Python 这个字符串是“原始的” —— 字符串中任 字符都不应该转义
    4.urlpatterns中的元素按照书写顺序从上往下逐一匹配正则表达式,一旦匹配成功则不再继续
       

     

    3.无名分组与有名分组

    无名分组

    -按位置传参
    -分组之后,会把分组出来的数据,当位置参数,传到视图函数,所以,视图函数需要定义形参
    -url(r'^publish/([0-9]{4})/([0-9]{2})$', views.publish),
    ​
    -def publish(request,*args):        视图函数接收

    有名分组

    -按关键字传参
    -有名分组之后,会把分组出来的数据,当关键字参数,传到视图函数,所以,视图函数需要定义形参,形参名字要跟分组的名字对应,与顺序无关
    -url(r'^publish/(?P<year>[0-9]{4})/(?P<mounth>[0-9]{2})/$', views.publish),
    ​
    -def publish(request, mounth,year):   试图函数接收

    注意:有名分组和无名分组,不要混用

    4.反向解析

    -路由层:
       -1 无参数:url(r'^publishadd133/$', views.publishadd,name='ddd'),
       -2 无名分组:url(r'^publishadd/([0-9]{4})/([0-9]{2})/$', views.publishadd,name='ddd'),
       -3 有名分组:url(r'^publishadd/(?P<year>[0-9]{4})/(?P<mounth>[0-9]{2})/$', views.publishadd,name='ddd'),
       
    -在模板层:
       -1 无参数:{% url 'ddd' %}
       -2 无名分组的:{% url 'ddd' 2018 12 %}
       -3 有名分组:{% url 'ddd' 2018 12 %}  还可以 {% url 'ddd' year=2018 mounth=12 %}
       
    -在视图层:
       from django.shortcuts import reverse
       在视图函数里:
       1 无参数:url=reverse('ddd')
       2 无名分组:url=reverse('ddd',args=(2018,12,))
       3 有名分组:url=reverse('ddd',args=(2018,12,)) 还可以 url=reverse('ddd',kwargs={'year':2018,'mounth':12})

    5.路由分发

    1 在不同的app里创建urls.py
    2 在总路由 
       -from django.conf.urls import include 
       -url(r'^blog/',include('blog.urls')),
       -url(r'^app01/',include('app01.urls')),
    3 在不同的app的urls里配置路由关系  
    ***重点***总路由,不能加结束符$

    6.名称空间

    命名空间(英语:Namespace)是表示标识符的可见范围。一个标识符可在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其它命名空间中。

    由于name没有作用域,Django在反解URL时,会在项目全局顺序搜索,当查找到第一个name指定URL时,立即返回

    我们在开发项目时,会经常使用name属性反解出URL,当不小心在不同的app的urls中定义相同的name时,可能会导致URL反解错误,为了避免这种事情发生,引入了命名空间

    -url(r'^blog/',include('blog.urls',namespace='blog')),
    -子路由:url(r'^publish/$', views.publish,name='test'),
    -反向解析:
       -视图层:url = reverse('blog:test')
       -模板层:{% url 'app01:test'%}
    ***一般不要用***
       子路由:url(r'^publish/$', views.publish,name='app01_test'),

    7.伪静态

    -路由:url(r'^book/(?P<id>d+.html)',views.book),
    -访问:http://127.0.0.1:8000/book/4.html

     

     

     

     

     

     

  • 相关阅读:
    转 Android的消息处理机制
    转 Android的消息处理机制(图+源码分析)——Looper,Handler,Message
    Android如何获取开机启动项列表
    在Android里完美实现基站和WIFI定位
    managedQuery和query的区别,
    Android WIFI 操作
    转:Android 获取Root权限
    CocoaPods: 制作cocoapods国内镜像
    CentosOS 7: 创建Nginx+Https网站
    Mac: 通过蓝牙用安卓手机向Mac发送文件
  • 原文地址:https://www.cnblogs.com/zhangpang/p/9960011.html
Copyright © 2011-2022 走看看