码迷,mamicode.com
首页 > 其他好文 > 详细

路由层

时间:2018-11-14 21:03:59      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:string   一个   mod   url   nta   rop   开发   表示   成功   

路由层

1.Django中路由作用

URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码对应执行

 

2.简单配置

from django.conf.urls import url
?
urlpatterns = [
     url(正则表达式, views视图函数,参数,别名),
]
?
-第一个参数是正则表达式(如果要精准匹配:^publish/$)
-第二个参数是视图函数(不要加括号)
-url(r^admin/, admin.site.urls)
?
注意:
   1.若要从URL 中捕获一个值,只需要在它周围放置一对圆括号。
2.不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^articles 而不是 ^/articles。
3.每个正则表达式前面的‘r‘ 是可选的但是建议加上。它告诉Python 这个字符串是“原始的” —— 字符串中任 字符都不应该转义
4.urlpatterns中的元素按照书写顺序从上往下逐一匹配正则表达式,一旦匹配成功则不再继续
   

 

3.无名分组与有名分组

无名分组

-按位置传参
-分组之后,会把分组出来的数据,当位置参数,传到视图函数,所以,视图函数需要定义形参
-url(r^publish/([0-9]{4})/([0-9]{2})$, views.publish),
?
-def publish(request,*args):        视图函数接收

有名分组

-按关键字传参
-有名分组之后,会把分组出来的数据,当关键字参数,传到视图函数,所以,视图函数需要定义形参,形参名字要跟分组的名字对应,与顺序无关
-url(r^publish/(?P<year>[0-9]{4})/(?P<mounth>[0-9]{2})/$, views.publish),
?
-def publish(request, mounth,year):   试图函数接收

注意:有名分组和无名分组,不要混用

4.反向解析

-路由层:
   -1 无参数:url(r^publishadd133/$, views.publishadd,name=ddd),
   -2 无名分组:url(r^publishadd/([0-9]{4})/([0-9]{2})/$, views.publishadd,name=ddd),
   -3 有名分组:url(r^publishadd/(?P<year>[0-9]{4})/(?P<mounth>[0-9]{2})/$, views.publishadd,name=ddd),
   
-在模板层:
   -1 无参数:{% url ddd %}
   -2 无名分组的:{% url ddd 2018 12 %}
   -3 有名分组:{% url ddd 2018 12 %}  还可以 {% url ddd year=2018 mounth=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,mounth:12})

5.路由分发

1 在不同的app里创建urls.py
2 在总路由 
   -from django.conf.urls import include 
   -url(r^blog/,include(blog.urls)),
   -url(r^app01/,include(app01.urls)),
3 在不同的app的urls里配置路由关系  
***重点***总路由,不能加结束符$

6.名称空间

命名空间(英语:Namespace)是表示标识符的可见范围。一个标识符可在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其它命名空间中。

由于name没有作用域,Django在反解URL时,会在项目全局顺序搜索,当查找到第一个name指定URL时,立即返回

我们在开发项目时,会经常使用name属性反解出URL,当不小心在不同的app的urls中定义相同的name时,可能会导致URL反解错误,为了避免这种事情发生,引入了命名空间

-url(r^blog/,include(blog.urls,namespace=blog)),
-子路由:url(r^publish/$, views.publish,name=test),
-反向解析:
   -视图层:url = reverse(blog:test)
   -模板层:{% url app01:test%}
***一般不要用***
   子路由:url(r^publish/$, views.publish,name=app01_test),

7.伪静态

-路由:url(r^book/(?P<id>\d+.html),views.book),
-访问:http://127.0.0.1:8000/book/4.html

 

 

 

 

 

 

 

路由层

标签:string   一个   mod   url   nta   rop   开发   表示   成功   

原文地址:https://www.cnblogs.com/zhangpang/p/9960011.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!