• $Django 路由层(有,无名分组、反向解析、总路由分发、名称空间、伪静态,django2.0path转化器)


    1 简单配置

      -第一个参数是正则表达式(如果要精准匹配:'^publish/$')
      -第二个参数是视图函数(不要加括号)
      -url(r'^admin/', admin.site.urls),

    注:

    当为网站根目录实现一个视图,你需要使用URL模式`` ‘^$’`` , 它代表一个空字符串

    不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^articles 而不是 ^/articles

    每个正则表达式前面的'r' 是可选的但是建议加上。它告诉Python 这个字符串是“原始的” —— 字符串中任何字符都不应该转义

     2 无名分组  

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

     3 有名分组 

      -按关键字传参
      -有名分组之后,会把分组出来的数据,当关键字参数,传到视图函数,所以,视图函数需要定义形参,形参名字要跟分组的名字对应,与顺序无关
      -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' foo.id %}
       -3 有名分组:{% url 'ddd' foo.year  foo.mounth %}  还可以 {% url 'ddd' year=foo.year mounth=foo.mounth %}
       
      -在视图层:
       from django.shortcuts import reverse
       在视图函数里:
       1 无参数:url=reverse('ddd')
       1 无名分组:url=reverse('ddd',args=(2018,12,))
       1 有名分组: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里配置路由关系 
      ***重点***总路由,有子路由的 不能加结束符$

    **** 项目下多个app项目****

    注意点:1.可以在每个app下的model见表或者单独一个app管理model
              2.每个app下的admin.py都可以注册任意一个app的表,在后台表还是归类到自己所在的一个app下.

     6 名称空间  

      -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

    8 转化器

       -django1.几版本的url和2.几的re_path用法一样.

     -django2.几的path

      path(准确路径,视图函数)         #与re_path(正则表达式,视图函数)第一个参数不同

      1.path(‘index/’,index) 

      2.path(r'index/<int:year>/',index2)  #与url(r'index/(?P<year>[0-9]{4)/$',index3) 差不多,就第一个参数不同

     -默认path的转化器

      str非空字符串不包含/

      path非空字符串 

      int 整数

      slug字母 数字 - _ 的字符串

      uuid 格式化的uuid 如:075194d3-6885-417e-a8a8-6c931e272f00

     -自定义path的转化器

    #a.py定义转化器
    class FourDigitYearConverter:  
        regex = '[0-9]{4}'  #类属性 str类型
        def to_python(self, value):  #value是regex匹配到的str,返回值为视图函数接收值
            return int(value)  
        def to_url(self, value):   #通常返回str(value) 用于url反向引用
            return '%04d' % value  
    #使用
    from django.urls import register_converter, path  
    from app01 import views 
    import a 
    #注册
    register_converter(a.FourDigitYearConverter, 'xxx')  
    urlpatterns = [  
        path('articles/2003/', views.special_case_2003),  
        path('articles/<xxx:year>/', views.year_archive),  
        ...  
    ]  
    

      

  • 相关阅读:
    vim配置
    git rebase
    mongodb的docker-compose.yml
    Nginx配置BrowserRouter跟随react-router
    Flux Architecture & Redux Data Flow & redux & react-redux PPT
    from acwing 从算法数量推算算法复杂度
    evalRPN 逆波兰算术
    二分区间
    Flex布局
    Treap 模板
  • 原文地址:https://www.cnblogs.com/3sss-ss-s/p/9923503.html
Copyright © 2020-2023  润新知