orm之路由层
一、简单配置
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之路由层的更多相关文章
- (day51)三、ORM、路由层、版本差异、流程图
目录 一.ORM关系建立 (一)ForeignKey(一对多) (二)ManyToManyField(多对多) (三)OneToOneField(一对一) 二.django请求生命周期流程图 三.ur ...
- django之表设计、路由层等
图书管理系统表的设计 from django.db import models # Create your models here. class Book(models.Model): title = ...
- Django --- 路由层(urls)
目录 1.orm表关系如何建立 2.django请求生命周期流程图 3.urls.py路由层 4.路由匹配 5.无名分组 6.有名分组 7.反向解析 8.路由分发 9.名称空间 10.伪静态 11.虚 ...
- django之路由层(反向解析)总结
表关系的建立方式 表与表之间的关系就三种 一对一 OneToOne(to='') # to后面可以跟字符串的表名 也可以直接跟变量名表名(该表名必须在上面提前定义出来) 一对多 ForeignKey( ...
- django 路由层(反向解析)03
目录 ORM表关系建立 Django请求生命周期流程图 urls.py 路由层 无名分组 有名分组 反向解析 无名分组的反向解析 有名分组的反向解析 以编辑功能为例 路由分发 名称空间 伪静态 虚拟环 ...
- Django之深入了解路由层
目录 ORM表关系建立 一对一 一对多 多对多 Django 请求生命周期 url 路由层 路由匹配 无名分组 有名分组 反向解析 路由匹配条件无分组的情况的反向解析 无名分组情况的反向解析 有名分组 ...
- Django路由层与视图层
表与表之间建关系 图书管理系统为例 书籍表 出版社表 作者表 三个表之间的关系: 考虑表之间的关系:换位思考 1.书籍和出版社是一对多,外键字段建立在书籍表中 2.书籍和作者是多对多, 需要建立第三方 ...
- Django学习之路由层
Django请求生命周期 - wsgi, 他就是socket服务端,用于接收用户请求并将请求进行初次封装,然后将请求交给web框架(Flask.Django) - 中间件,帮助我们对请求进行校验或在请 ...
- Django 路由层(urlconf)
Django 的路由层(URLconf) URL配置(conf)就像是Django所支撑的网站的目录; 本质就是:URL与调用该URL执行的视图函数的映射表; 通俗的讲:就是用户使用哪个url,URL ...
随机推荐
- iOS - UITextView实现placeHolder占位文字
iOS之UITextView实现placeHolder占位文字的N种方法 前言 iOS开发中,UITextField和UITextView是最常用的文本接受类和文本展示类的控件.UITextFie ...
- iOS - 转场动画
苹果在 iOS7 定制了 ViewController 的切换效果 一 在iOS5和iOS6之前,ViewController的切换主要有4种 Push/Pop,NavigationViewCotnr ...
- MDU某产品OMCI模块代码质量现状分析
说明 本文参考MDU系列某产品OMCI模块现有代码,提取若干实例以说明目前的代码质量,亦可作为甄别不良代码的参考. 本文旨在就事论事,而非否定前人(没有前人的努力也难有后人的进步).希望以史为鉴,不破 ...
- Objective-c官方文档 怎么使用对象
版权声明:原创作品,谢绝转载!否则将追究法律责任. 对象发送和接受消息 尽管有不同的方法来发送消息在对象之间,到目前位置是想中括号那样[obj doSomeThing]:左边是接受消息的接收器,右 ...
- AD采样模块采集带模拟量真空表值的实验
实验采用带模拟量,分辨率为1-5V,量程为0--101kpa的真空表 数据采集模块采用DAM-8021, 16位模块 算法描述如下: 真空表读数范围: 0到-101kpa 模拟量输出: 1-5V 一 ...
- 题目1010:A + B(字符串转数字)
题目链接:http://ac.jobdu.com/problem.php?pid=1010 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...
- mysql innodb存储引擎优化
innodb_data_home_dir 这是InnoDB表的目录共用设置.如果没有在 my.cnf 进行设置,InnoDB 将使用mysql的datadir目录为缺省目录.如果设定一个空字串,可以i ...
- 惠普hp服务器通过iLO接口远程安装操作系统
我们以hp proliant sl210t的机器为例,我们在配置好iLO接口的远程管理后,我们便可以通过iLO进行操作系统的安装 关于惠普服务器的iLO配置,可参笔者的另一篇文章<关于hp pr ...
- Instrumentation 两种方法 premain Agent
由于jvm内部的限制Instrumentation 只能修改方法体 不能动态添加删除方法(安全第一吧!!!!) Premain 对于使用命令行接口的实现,可以将以下选项添加到命令行来启动代理: -ja ...
- python转化字符串形式的json
在使用python对字符串形式的json进行 json.loads() 的操作时,遇到了:JSONDecodeError: Invalid \escape,提示\无法excape,可以通过以下方式将字 ...