zoukankan      html  css  js  c++  java
  • django 实战篇之路由层

    路由层

    如何给网页添加首页及尾页

    urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'test',views.test),
    url(r'testadd',views.testadd),
    ]
    路由一旦匹配就不再走下面的路由匹配关系了

    路由增加首页的方式
    url(r'^$',views.home)
    路由增加尾页的方式(当所有的路径都匹配不上时,给我返回404提示信息)
    url(r'',views.error)

        无名分组:

    url(r'^test/([0-9]{4})/',views.test)
    会将加了括号的正则表达式匹配的内容当做位置参数传递给后面的视图函数

     有名分组:

    url(r'^test/(?P<year>d+)/',views.test)
    会将加了括号的正则表达式匹配的内容当做关键字参数传递给后面的视图函数
    关键字就是你尖括号里面的名字(year)

    注意:

    有名分组和无名不能混合使用!!!
    只要不混着用,有名分组和无名分组支持多个相同类型的传参

    反向解析(需求是路由函数名修改后前端的页面中用到这个函数的名字都需要修改)

    前端反向解析
    {% url 'add' %} # {% url '放urls.py中路由与视图函数的name的值' %}

    后端反向解析
    from django.shortcuts import reverse

    url(r'^testadd123/$',views.testadd,name='add')

    res = reverse('add')

    无名分组的反向解析
    前端反向解析
    {% url 'add' 1 %} # {% url '放urls.py中路由与视图函数的name的值' %}

    后端反向解析
    from django.shortcuts import reverse

    url(r'^testadd123/(d+)/$',views.testadd,name='add')

    res = reverse('add',args=(1,))
    有名分组的反向解析
    前端反向解析
    {% url 'add' 1 %} # {% url '放urls.py中路由与视图函数的name的值' %} 推荐你用这种

    <a href="{% url 'add' year=1 %}">999</a>
    后端反向解析
    res = reverse('add',args=(1,)) # 推荐你用这种

    res = reverse('add',kwargs={'year':1})

    也可以这样拿到前端的id值

    url(r'^edit/(d+)/',views.edit,name='edit_user')
    {%for user_obj in queryset %}
    edit/?id={{user_obj.pk}}
    edit/?id={{user_obj.pk}}
    edit/?id={{user_obj.pk}}

    {%for user_obj in queryset %}
    edit/{{user_obj.pk}}/ >>> url(r'^edit/(d+)/') def edit(request,edit_id) url = reverse('edit_user',args=(edit_id,))
    edit/{{user_obj.pk}}/
    edit/{{user_obj.pk}}/
    edit/{{user_obj.pk}}/
    """

     路由分发

    总路由不再直接做路由与视图函数的对应关系,而是将获取的路由分发给下面的app去处理对应关系
    from django.conf.urls import include

    每一个app下都可以新建自己的urls.py static文件夹 templates文件夹
    项目总路由:
    url(r'^app01/',include(app01_urls)),
    url(r'^app02/',include(app02_urls))

    应用子路由:
    app01.urls.py
    from django.conf.urls import url
    from app01 import views

    urlpatterns = [
    url(r'^index/',views.index)

    ]
    app02.urls.py
    from django.conf.urls import url
    from app02 import views

     名称空间(可以通过添加名乘空间找到是属于哪个app中的值)

    url(r'^app01/',include(app01_urls,namespace='app01')),
    # url(r'^app02/',include(app02_urls,namespace='app02'))

    # print(reverse('app01:aaa'))
    # print(reverse('app02:aaa'))

     伪静态的概念(就是在路由后面加上.html文件)

    例如:url(r'^index.html/',views.index)

    假装自己的路径是一个静态(数据写死的)文件的路径,其实你
    是经过了视图函数处理,动态渲染页面
    提高百度收藏你这个网页力度,当别人搜索你这个页面相关的内容
    百度会优先展示你的页面(这样虽然能提高你网页被访问概率,但是还是干不过RMB玩家)

    虚拟环境(演示一下虚拟环境,下载django2.0测试自定义转换器)
    由来:
    每个项目用到的模块不一样
    目的:
    为了让每一个项目都有仅仅属于自己的项目解释器
    使用:
    new project的时候选择虚拟环境创建项目
    如果勾选了下面的make to all project你创建的虚拟环境就能够被其他新建的项目使用

    django2.0与django1.0的区别(了解)
    1.0里面的url对应django2.0里面re_path
    django2.0里面的path第一个是精准匹配(你怎么写的,我就怎么匹配)
    django1.0版本中匹配到的参数都是字符串类型

    django2.0转换器(了解)
    1.0版本的url和2.0版本的re_path分组出来的数据都是字符串类型
    默认有五个转换器,感兴趣的自己可以课下去试一下
    str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
    int,匹配正整数,包含0。
    slug,匹配字母、数字以及横杠、下划线组成的字符串。
    uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
    path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)

    path('index/<str:id>/',index )

    django2.0自定义转换器
    需要三步走战略
    # 自定义转换器
    class FourDigitYearConverter:
    regex = '[0-9]{4}'
    def to_python(self, value):
    return int(value)
    def to_url(self, value):
    return '%04d' % value
    register_converter(FourDigitYearConverter, 'yyyy')

    urlpatterns = [
    path('admin/', admin.site.urls),
    # path('index/<int:id>/',index ),
    # path('index/<str:id>/',index ),
    path('login/<yyyy:name>/',index)

    ]

  • 相关阅读:
    js保留几位小数
    IE的卸载之路(折腾1个多月,记录下。。)
    百度map
    鼠标滑轮事件监听,兼容各类浏览器
    sql server分页存储过程
    echarts(3.0)的基本使用(标签式导入)
    datagrid加分组后的效果
    python文件操作
    python求100以内素数
    python 三元运算符
  • 原文地址:https://www.cnblogs.com/tangda/p/10719257.html
Copyright © 2011-2022 走看看