Django框架之url路由层
一 Django数据库的一对多与多对多表的建立
 一对多
  publish_id的建立:publish=models.ForeignKey(to='Publish', to_field='id')
  book.publish_id
  book.publish
 多对多:(自动创建第三张表)
  authors = models.ManyToManyField(to='Author')
二 路由层的配置
 1 简单配置: url(r'^admin/', admin.site.urls),
  第一个参数是正则表达式(如果要精准匹配:'^publish/$')
  第二个参数是视图函数(不要加括号)
 2 无名分组
  按位置传参,分组之后,会把分组出来的数据,当位置参数,传到视图函数,所以,视图函数需要定义形参
  url(r'^publish/([0-9]{4})/([0-9]{2})$', views.publish),
  def publish(request,*args):   视图函数可以这样接收
 3 有名分组
  按关键字传参,有名分组之后,会把分组出来的数据,当关键字参数,传到视图函数,视图函数需要定义形参,形参名字要跟分组的名字对应,与顺序无关
  url(r'^publish/(?P<year>[0-9]{4})/(?P<mounth>[0-9]{2})/$', views.publish), ##(?P<year>[0-9])分组后赋值给year
  def publish(request, mounth,year):
  *****有名分组和无名分组,不要不能混用****
 4 反向解析
  1 先给路由命一个名:
   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'),
  2 在模板层:
   1 无参数:{% url 'ddd' %}
   2 无名分组的:{% url 'ddd' 2018 12 %}
   3 有名分组:{% url 'ddd' 2018 12 %}  还可以 {% url 'ddd' year=2018 mounth=12 %}  
  3 在视图层:在视图函数里:
   from django.shortcuts import reverse  ##必须先导入模块 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.pyo8
  2 在总路由
   from django.conf.urls import include   ##必须先导入模块 include
   url(r'^blog/',include('blog.urls')),
   url(r'^app01/',include('app01.urls')),
  3 在不同的app的urls里配置路由关系 
  ***重点***总路由,不能加结束符$
 6 名称空间 ***一般不要用***
  1 url(r'^blog/',include('blog.urls',namespace='blog')),
  2 子路由:url(r'^publish/$', views.publish,name='test'),
  3 反向解析:
   1 视图层:url = reverse('blog:test')
   2 模板层:{% url 'app01:test'%}
  ****常用下面的命名方式代替上面操作*** ##重命名直接加上在那个app上
  子路由: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
三 作业:
 1 自己尝试对象有没有删除方法,更新方法
 2 有时间的同学研究一下如何手动创建第三张表
 3 图书管理系统,路由不用get形式传参,用有名分组,无名分组
 4 http://127.0.0.1:8000/ 访问这个路径,匹配到图书列表
 5 路由匹配不上,调到404的页面
 6 图书管理系统,继续写

posted on 2018-11-07 20:24  吴之家  阅读(112)  评论(0编辑  收藏  举报