orm之路由层

一、简单配置

1.参数

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

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

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

这样的话,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里
]
View Code

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),
]
View Code

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

8.静态和伪静态

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

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

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

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

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

 

转载于:https://www.cnblogs.com/xufengnian/p/9982608.html

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值