路由层

路由层

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

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

时间: 2024-11-08 18:03:34

路由层的相关文章

DJANGO入门系列之(Django请求生命周期and路由层)

昨日回顾 1 orm 创建表,新增字段,修改,删除字段,不能创建数据库 -字段属性phone=models.CharField(max_length=64,null=True) -null=True 代表该列可以为空 2 数据的增删改查 -增(1):User.objects.create(address='') -增(2):实例化产生一个user对象,user对象的save方法 -删:User.objects.filter(id=1,name='lqz').first().delete() -删

Django 路由层(urlconf)

Django 的路由层(URLconf) URL配置(conf)就像是Django所支撑的网站的目录; 本质就是:URL与调用该URL执行的视图函数的映射表; 通俗的讲:就是用户使用哪个url,URL(conf)就需要告诉服务器执行哪个程序代码. 一  路由配置的简单使用 path :不能使用正则 ,path('路径',views.方法) re_path :可以使用正则 ,re_path(r'正则表达式路径',views.方法) from django.urls import path,re_p

五十六、Django路由层与视图层

一.路由层 1.路由匹配规律 # 网站首页路由:url(r'^$',views.home) # 网站不存在页面:url(r'',views.error) urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^$',views.home), url(r'^test/$',views.test), url(r'^testadd/$',views.testadd), url(r'',views.error) ] # 注意:第一个参数是正则表达

Django之路由层与视图层

Django之路由层与视图层 路由层 urlpatterns = [ url(r'^admin/',admin.site.urls), url(r'^$',views.home), # 网页首页路由 url(r'^test/$',views.test), url(r'^testadd/$',views.testadd), url(r'',views.error) # 网页不存在页面 ] # 注意:第一个参数是正则表达式,匹配规则按照从上往下依次匹配,匹配到一个之后立即停止,直接执行对应的视图函数

Django路由层

Urls的正则匹配 路由层作用是url与视图函数的映射 特点1.匹配成功后 不再往下匹配 2.如果结尾没有/ 匹配失败后 加上/再走一次匹配列表,在settings.py中设置了 APPEND_SLASH=False 可以关闭 如何拿到完整url? 在视图函数中,request.path 可以拿到前缀路径 通过request.get_full_path() 可以拿到完整的路径 http://127.0.0.1:8000/test/hahah/?id=asda/ request.path>>&g

Django之路由层和视图层

一.路由层 urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^$',views.home), url(r'^test/$',views.test), url(r'^testadd/$',views.testadd), url(r'',views.error) ] # 注意:第一个参数是正则表达式,匹配规则按照从上往下一次匹配,匹配到一个之后立即匹配,直接执行对应的视图函数 # 网站首页路由 url(r'^$',views.home)

Django路由层与视图层、pycharm虚拟环境

一. Django路由层 路由层即对应项目文件下的urls.py文件.实际上每个APP中也可以有自己的urls.py路由层.templates文件夹及static文件夹.Django支持这么做,也为实际工作中一个项目多人协作完成提供了便利:即每个人单独建一个Django项目写一个APP,最后新建一个Django项目将所有APP汇总,然后settings中注册各个APP,再修改一下其他配置即可. 路由层大致内容如下: from django.conf.urls import url from dj

Django 基础 之路由层

1.路由层简单配置 (1)path方法 写固定的url. (2)re_path方法 可以正则规则 例: urlpatterns = [ path('admin/', admin.site.urls), path('articles/2003/', views.special_case_2003), re_path(r'^articles/([0-9]{4})/$', views.year_archive), re_path(r'^articles/([0-9]{4})/([0-9]{2})/$'

Django的路由层和视图层

django orm中表与表之间建关系            一对多  ForeignKey(to='Publish')                        一对一  OneToOneField(to='AuthorDetail')                        多对多  ManyToManyField(to='Author') 注意:                前面两个关键字会自动再字段后面加_id                最后一个关键字 并不会产生实际字段