• 路由控制


    1.路由关系:

    重点先来:无名分组和有名分组

    首先来说下url参数里面内容:

      url请求地址,也就是第一个参数,可以写成正则表达式。第二个参数是视图函数,第三个参数是别名,后面再细说。

      用户输入请求从上往下匹配,一旦匹配成功就不往下走了。

      如果分成几个组,相应的视图函数就应该有几个参数去接受。具体的怎么把分组的值传给形参我也不太清楚。

      在setting里设置:APPEND_SLASH=False,请求时,浏览器不会自动补全斜杠,带上斜杠就匹配失败。slash是斜杠的意思。默认为True。

      伪静态:优点:加上html让别人以为是静态网页。静态网页一般后期不会改。seo(搜索引擎)收录的权限高,可以被收录到百度数据库中。

     百度会把一些静态文件收录到自己的数据库里。

    无名分组:例如url(r'^admin/2005/12',views.admin) ==》并没有给分组指定名称

    有名分组:

    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来接收。和函数传参类似,打印kwargs是以恶搞字典,args是一个元组。

    5.捕获到的参数(实参)都是字符串类型。

    6.可以给形参设置默认值。如果实参没有传值就用默认值,传值了用实参的。

    路由分发

    首先要导入include方法

    1.from django.conf.urls import include

    2.两种方式路由分发:

    方式一:url(r'^app01/',include('app01.urls')) ===>方式一更直接点

    方式二:from app01 import urls

    url(r'^app01/',include(urls))

    3.在相应的app里创建urls文件,叫别的名字也可以,规范一下就叫urls。

    4 urlpatterns 不能变名字 ,后面的写法就一样了 url(r'^test',views.test3 ),
    5 重复上面步骤,分发多个

    django 1.几版本和2.几把那本的区别

    2.几版本的re_path就是原来的1.几版本的url

    2.几版本多了个正则多了个path。

    反向解析:重点

    1.先加一个别名

    url(r'^admin/',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,))

    分析:想我们一开始写的硬编码,也就是吧action要跳转的路径写死了。但是像淘宝,天猫等都会经常更新新东西,,那么你的页面上的url路径也会时不时的变化。但是如果有特别多的商品,那么你就得去服务端一个一个的改,这样显得很麻烦,那么有没有一种机制帮我们解决问题呢?那就按照我下面的办法解决。就把url路径写活了。

    1、首先给url起一个别名。

    2、然后在login.html中写上{%  url ‘别名’’  %}    ,如果在页面中点击查看元素,它会变成login.html,,,当然我的是分发了,,就会变成test/login.html

    3、这样你就可以修改你的正则了,,因为他是按照别名走的,不会影响。

    urls.py

    login.html

    查看元素的结果

    这样的好处是:无论你怎么改你要匹配的url,只要你写上了别名。在html实现了模板语法,就会去找别名对应的那个url,以后不管你怎么改url都没事,就写活了,就不像一开始写的硬编码了。

    模板:{% 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,name是别名,比如app01_test)
    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>

  • 相关阅读:
    01-JAVA语言基础(动手动脑)
    大道至简第一章JAVA伪代码形式读后感
    《美国教授写给被开除中国留学生的信》阅读笔记
    《大道至简》读后感
    使用java2Word生成Word文档打不开报错 存在非法字符xml
    继上篇博客对安卓爬虫以及TextView更新的问题解释
    安卓Jsoup爬虫
    AndroidStdio模拟器打不开报错 Guest isn't online after 7 seconds
    MapReduce
    水晶报表报错:log4net初始值问题
  • 原文地址:https://www.cnblogs.com/Roc-Atlantis/p/9585029.html
Copyright © 2020-2023  润新知