• 路由层


    路由关系:

    无名分组:
            url(r'^admin/', admin.site.urls),
            # 第一个参数,可以写一个正则表达式
            # 从上往下匹配,一旦匹配成功,就不往下走了
            # 如果分几个个组,相应的视图函数,就应该接收几个
            # 在setting里设置:APPEND_SLASH=False,请求时,浏览器不会自动补全斜杠,带上斜杠就匹配失败
            # 伪静态,方便搜索引擎收录
    有名分组:views视图可以不按照位置接收值
        1 url(r'^test/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})', views.test)
        2 def test(request,month,year):
            print(year)
            print(month)
            return HttpResponse('ok')
            #名字必须一致,否则报错,位置可以颠倒,如果分了两个组,必须用两个参数接
        3 有名分组和无名分组不要混用
        4 有名分组可以用**kwargs接收,无名分组可以用*args接收
        5 分组捕获的参数,都是str类型
        6 可以设置默认值
    路由分发:
        1 先导入from django.conf.urls import include  (总urls里)
        2 url(r'^app01/', include('app01.urls')),有两种方式:。。。。    请求url多了一层
        3 在相应的app里创建urls  py文件,建议,不要改名字
        4 urlpatterns 不能变名字 ,后面的写法就一样了 url(r'^test',views.test3 ),
        5 重复上面步骤,分发多个
    2.几和1.几的区别
        1 2.几的re_path 就是我原来的url
        2 2.几多了一个path,不支持正则
    反向解析  url变动态,写活
        1 路由中,命一个名,url(r'^index/', views.index,name='n1'),
        2 在视图函数里:
            from django.shortcuts import reverse
            #这样就能拿到我反向解析出来的url
            url=reverse('n1')
        3 在模板里用:
            {% url 'n1'%}
        4 带位置参数反向解析  url(r'^index/([0-9]{4})/([0-9]{2})', views.index,name='n1'),
            视图:url=reverse('n1',args=(2012,12,))
            
            模板:{% url 'n1' 2012 12 %}
        5 带关键字参数反向解析  url(r'^index/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})', views.index,name='n1'),
            视图:url=reverse('n1',args=(2012,12,)   ---可以
                  url=reverse('n1',kwargs={'year':2014,'month':12})-----也可以
                  
            模板:
                {% url 'n1' 2012 12 %}----可以
                {% url 'n1' month=12 year=2012 %}----可以
            注意:按位置传,顺序是固定的
                    
        作用:修改路由中url的时候,其它地方不需要改动
    名称空间:(知道它,但是建议不同app的url里name不能重名,app的名字_name)
        1   url(r'^app01/', include('app01.urls',namespace='app01')),
                urlpatterns = [
                    url(r'^test',views.test3 ,name='test'),
    
                ]
            url(r'^app02/', include('app02.urls',namespace='app02')),            
                urlpatterns = [
                        url(r'^test02',views.test3 ,name='test'),
    
                    ]
        2 在视图函数里:
            url=reverse('app02:test')
            print(url)
        3 在模板里:
            <a href="{% url 'app02:test' %}">点我跳到首页</a>
    django 2.0 path
    
        1 from django.urls import path
        2 不支持正则,精准匹配
        3 有5个转换器(int,str,slug,path,uuid) 函数必须用相同的参数名接收
        4 自定义转换器:
            1 写一个类:
            class Test:
                regex = '[0-9]{4}'
                def to_python(self, value):
                    # 写一堆处理
                    value=value+'aaa'
                    return value
                def to_url(self, value):
                    return '%04d' % value
            2 from django.urls import register_converter
            3 register_converter(Test,'ttt'4 path('index/<ttt:year>', views.index,name='index'),
  • 相关阅读:
    Codeforces Round #417 C. Sagheer and Nubian Market
    linux 终端抓包命令
    计算机网络体系结构分析
    排序算法-快速排序
    排序算法-堆排序
    排序算法-希尔排序
    排序算法-插入排序
    排序算法-冒泡排序
    排序算法-选择排序
    杂谈:终端小工具
  • 原文地址:https://www.cnblogs.com/xujinjin18/p/9594400.html
Copyright © 2020-2023  润新知