orm路由层

orm路由层

1.路由文件urls.py

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

​ 1)其中的url是一个函数,第一个参数r'^admin/,传的是正则表达式,进行的是路由匹配,

​ 2)第二个参数传的是视图函数

​ 3)第三个参数传的是名字,用于反向解析

2.无名分组(主要与反向解析一起使用)

​ 1.在url的函数的第一个参数中进行分组(分几组就要有几个参数接收)(主要为视图函数接收做准备)

url(r'^publish/([0-9]{4})/([0-9]{2})$', views.publish),

​ 2.视图函数的接收方式为def publish(request,cs1,cs2),cs1接收([0-9]{4}),cs2接收([0-9]{2})

3.有名分组(主要与反向解析一起使用)

​ 1.与无名分组类似但是要为组进行命名

url(r'^publish/(?P<year>[0-9]{4})/(?P<mounth>[0-9]{2})/$', views.publish)

​ 2.视图函数的接收方式为def publish(request,year,mounth)

4.反向解析

​ 将前端页面上{% url 'ddd' %}中的值传给视图函数

​ 1.先在路由层进行命名,第三个参数的名字就是用于反向解析

url(r'^publishadd133/$', views.publishadd,name='ddd')

​ 无名分组

url(r'^publishadd/([0-9]{4})/([0-9]{2})/$', views.publishadd,name='ddd')

​ 有名分组

url(r'^publishadd/(?P<year>[0-9]{4})/(?P<mounth>[0-9]{2})/$', views.publishadd,name='ddd')

​ 2.在模板层使用的方式

1 无参数:{% url 'ddd' %}
2 无名分组的:{% url 'ddd' 2018 12 %}
3 有名分组:{% url 'ddd' 2018 12 %}  还可以 {% url 'ddd' year=2018 mounth=12 %}

​ 3.在视图函数中的使用

 无参数:url=reverse('ddd')
 无名分组:url=reverse('ddd',args=(2018,12,))
 有名分组:url=reverse('ddd',args=(2018,12,)) 还可以 url=reverse('ddd',kwargs={'year':2018,'mounth':12})

5.路由的分发

​ 主要是用于协同开发,在每一个应用中都创建一个路由urls.py,再在总的路由文件urls.py中建立关系

from django.conf.urls import include 
url(r'^blog/',include('blog.urls')), //就是建立了与blog应用中blog.urls路由表的路由关系

6.django2.0与django1.0路由层的区别

​ django2.0路由中主要使用的是 re_path和path

​ re_path:用法跟1.0的url的用法相同

​ path:传的是路径,是准确的路径

​ 使用path分组时会用到5个转换器--->path('test/path:year', views.re_test)

​ str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
​ int,匹配正整数,包含0。
​ slug,匹配字母、数字以及横杠、下划线组成的字符串。
​ uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
​ path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)

7.自定义一个转换器

1 定义一个类:
	class MyCon:
	# 写一个正则表达式
	regex = '[0-9]{4}'
	1 定义一个类:
	class MyCon:
	# 写一个正则表达式
	regex = '[0-9]{4}'
	# 匹配出來的数据,会传到这里,retrun回去的,会被视图函数接收
	def to_python(self, value):
		return int(value)
	# 反向解析用的
	def to_url(self, value):
		return '%04d' % value
	2 from django.urls import register_converter
		register_converter(MyCon,'yyy')
	3 path('test/<yyy:year>', views.re_test,name='test'),			
	# 匹配出來的数据,会传到这里,retrun回去的,会被视图函数接收
		def to_python(self, value):
			return int(value)
	# 反向解析用的
		def to_url(self, value):
			return '%04d' % value
	2 from django.urls import register_converter
			register_converter(MyCon,'yyy')
	3 path('test/<yyy:year>', views.re_test,name='test'),
posted @ 2018-11-07 17:53  周建豪  阅读(132)  评论(0编辑  收藏  举报