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'),