一、简单配置

1.参数

第一个参数是正则表达式(如果要精准匹配:‘^publish/$’),或者加斜杠('^publish/')

第二个参数是视图函数(不要加括号)

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^publish/', views.publish),
    url(r'^publishadd', views.publishadd),
]

这样的话,publish和publishadd就会分别对应到不同的函数,不会出乱子了

2.有名无名分组

注意有名分组和无名分组不要混用,无名分组必须要按位置传参

分组都要用括号括起来

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^publish/[0-9]{4}/$', views.publish),#匹配四位数字
    url(r'^publish/(?P<year>[0-9]{4})/(?P<month>[0-9]{4}/)', views.add),#有名分组,会进行传参,add函数里,形参变量必须是year,month
    url(r'^add/\d+/$',views.add),#匹配任意长度的数字
    url(r'^flash/([0-9]{4})/([0-9{2}])',views.flash)#进行分组,这是无名分组,分组后会按位置进行传参,传到视图函数views.flash里
]

3.反向解析

先在路由层urls命一个名

  1)无参数:url(r"^/publish/",views.publish,name='ddd')

  2)无名分组:url(r“^publishadd/([0-9]{4})/([0-9]{2})”,views.publish,name='ddd')

  3)有名分组:url(r'^publishadd/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})',views.publish,name='ddd')

  补充:在url写了name支持反向解析的,都是可以被redict的网站。

在模板层:

  1)无参数:{% url 'ddd' %}

  2)无名分组:{% url 'ddd' 2018 12 %}  在ddd后面直接传参

  3)有名分组:方式1:{% url ‘ddd’ 2018 12 %}按位置传参也可以

          方式2:{% url ‘ddd’ year=2018 month=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,'month':12})

注意:在视图层,反向解析后使用redict(url),而不是使用render。render后面接具体的html地址。

分组时,视图层的函数不要用*args和**kwargs去接收参数,因为分组一般不会太多,不建议使用这种方式

4.路由分发

随着项目越写越大,会创建出多个app,app下面会有urls,这时对路由进行分发,可以细分管理好项目。在每个app下创建urls.py文件

步骤:

  1)在总路由写相关配置

  from django.conf.urls import include

  url(r'^blog/',include('blog.urls'))

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

  2)在不同的app的urls里配置路由关系

  ****重点****总路由,不能加结束符$

5.名称空间

反向解析时,如果在不同app,例如app01里,设置了name='ddd',然后又在app02里,设置了name='ddd',这样反向解析时可能会出问题,因此牵扯到了名称空间。

这样,在总路由设置时,可以设置:

  url(r'^app01/',include('app01.urls',namespace='app01')),

  url(r'^app02/',include('app02.urls',namespace='app02'))

在设置了名称空间以后,在路由层views写方向解析时,要这么写

  url=reverse(‘app01:test’)

在模板层写反向解析:

  {% url ‘app01:test’ year=2018 month=12 %}

但是实际上名称空间一般不怎么用,有更好的方法。不同的app,在总路由的反向解析可以设置不同的名字

  url(r'^publish',views.publish,name='app01_test')这样直接设置不同的名字

6.伪静态

  路由:url(r'^book/(?P<id>\d+.html)',views.book)

  访问:http://127.0.0.1:8000/book/4.html

把动态的页面伪装成静态,方便搜索引擎收录,实际上数据可能是来自数据库,只是伪装成了静态。

7.配置error

当所有网址都匹配不上时,设置一个优雅404界面

url('',views.error)表示所有的都匹配到视图层的error函数

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^app02/', include('app02.urls',namespace='app02')),
    url(r'^login/', views.login),
    url(r'', views.errors),
]

注意,优雅404的路由写在最下层。因为路由的匹配规则是从上往下进行匹配。

8.静态和伪静态

动态网址伪装成静态网址,方便搜索引擎收录,要在url里进行配置

url(r'^book/(?P<id>\d+.html)',views.book)

这时访问网址时就可以输入http://127.0.0.1:8000/5.html

表面上看上去是静态网址,实际上是进行了路由匹配,网址还是动态的,这样就简单的做到了伪静态的效果。

实际上的伪静态技术要更为复杂

orm之路由层的更多相关文章

  1. (day51)三、ORM、路由层、版本差异、流程图

    目录 一.ORM关系建立 (一)ForeignKey(一对多) (二)ManyToManyField(多对多) (三)OneToOneField(一对一) 二.django请求生命周期流程图 三.ur ...

  2. django之表设计、路由层等

    图书管理系统表的设计 from django.db import models # Create your models here. class Book(models.Model): title = ...

  3. Django --- 路由层(urls)

    目录 1.orm表关系如何建立 2.django请求生命周期流程图 3.urls.py路由层 4.路由匹配 5.无名分组 6.有名分组 7.反向解析 8.路由分发 9.名称空间 10.伪静态 11.虚 ...

  4. django之路由层(反向解析)总结

    表关系的建立方式 表与表之间的关系就三种 一对一 OneToOne(to='') # to后面可以跟字符串的表名 也可以直接跟变量名表名(该表名必须在上面提前定义出来) 一对多 ForeignKey( ...

  5. django 路由层(反向解析)03

    目录 ORM表关系建立 Django请求生命周期流程图 urls.py 路由层 无名分组 有名分组 反向解析 无名分组的反向解析 有名分组的反向解析 以编辑功能为例 路由分发 名称空间 伪静态 虚拟环 ...

  6. Django之深入了解路由层

    目录 ORM表关系建立 一对一 一对多 多对多 Django 请求生命周期 url 路由层 路由匹配 无名分组 有名分组 反向解析 路由匹配条件无分组的情况的反向解析 无名分组情况的反向解析 有名分组 ...

  7. Django路由层与视图层

    表与表之间建关系 图书管理系统为例 书籍表 出版社表 作者表 三个表之间的关系: 考虑表之间的关系:换位思考 1.书籍和出版社是一对多,外键字段建立在书籍表中 2.书籍和作者是多对多, 需要建立第三方 ...

  8. Django学习之路由层

    Django请求生命周期 - wsgi, 他就是socket服务端,用于接收用户请求并将请求进行初次封装,然后将请求交给web框架(Flask.Django) - 中间件,帮助我们对请求进行校验或在请 ...

  9. Django 路由层(urlconf)

    Django 的路由层(URLconf) URL配置(conf)就像是Django所支撑的网站的目录; 本质就是:URL与调用该URL执行的视图函数的映射表; 通俗的讲:就是用户使用哪个url,URL ...

随机推荐

  1. No.2 PyQt学习

    新增加了状态栏.菜单栏和工具栏,界面如下: 代码如下: # -*- coding: utf-8 -*- import sys from PyQt4 import QtGui, QtCore class ...

  2. WebService连接postgresql( 失败尝试)

     一.先进行postgresql的配置 1. 安装ODBC驱动 下载地址:http://www.postgresql.org/ftp/odbc/versions/msi/ 2. 打开 控制面板 -&g ...

  3. .NET 正则表达式使用高级技巧之替换类介绍

    因为.net的基本正则语法和Perl5基本相同,所以基本语法你可以去下载一下M$的JS帮助文档,上面有详细的说明 \d表示什么,{,}表示什么,\[表示什么……,这里我只想提醒大家一点,为了避免和反向 ...

  4. java基础---->数组的基础使用(二)

    这里对List(jdk 1.7)列表里面的一些方法做一些简单的分析,以避免有些函数的误用.手写瑶笺被雨淋,模糊点画费探寻,纵然灭却书中字,难灭情人一片心. List中注意的方法 一.Arrays.as ...

  5. office excel Query 功能

    Microsoft Query 合并查询 Excel 2016 默认已集成 Power Query 功能

  6. NC 的简单使用

    netcat被誉为网络安全界的’瑞士军刀’,相信没有什么人不认识它吧……一个简单而有用的工具,透过使用TCP或UDP协议的网络连接去读写数据.它被设计成一个稳定的后门工具,能够直接由其它程序和脚本轻松 ...

  7. create-react-app中img图片不现实

    场景:正常的情况下是这么引用图片,我的图片路径是 src/images/login-from-icon1.png <img src="../images/login-from-icon ...

  8. was cached in the local repository, resolution will not be reattempted until the update interval of localhost-repository has elapsed or updates are forced

    ailed to collect dependencies at com.eshore:common:jar:0.0.1-SNAPSHOT: Failed to read artifact descr ...

  9. opencv学习网站

    强烈推荐一个老外的网站,pyimagesearch 网址:https://www.pyimagesearch.com/

  10. CAP 一致性协议及应用解析

    https://mp.weixin.qq.com/s/26x8O1bRzurl84e3nM6TTA CAP 一致性协议及应用解析 原创: 有赞技术 有赞coder 1周前 文 | 云开 on 用户中心 ...