django之路由系统

一. URLconf配置

  基本格式

from django.conf.urls import url

urlpatterns = [
     url(正则表达式, views视图函数,参数,别名),
]

  url()方法,第一个参数就是一个正则表达式,一旦前面的正则内容匹配到了内容,就不会再往下继续匹配,而是直接执行对应的视图函数, 正是由于这种情况,当我们的项目特别庞大的时候,URL的前后顺序也是我们需要考虑的极有可能出现URL错乱的情况.Django在路由匹配的时候,在浏览器没有敲入最后的斜杠,Django会先拿着没有敲斜杠的结果去匹配,如果都没有匹配上,会让浏览器在末尾加斜杠再发一次请求,再次的进行匹配,如果还匹配不上会报错,如果不想做二次匹配那么就可以在settings配置文件中指定APPEND_SLASH = False  该参数默认为True

二. 无名分组和有名分组

  url(r'^test/[0-9]{4})/', views.test )  路由匹配的时候,会将括号内正则表达式匹配到的内容  当作位置参数传递给视图函数 test(request, 2019)

  url(r'^test/(?P\d+)/', views.test)  路由配置的时候  会将括号内正则表达式匹配到的内容当做关键字参数传递给视图函数test(request, year=2019)

  无名分组和有名分组不能混合使用, 但是在一种分组下,可以使用多个,无名分组支持多个,url(r'^test/(\d+)/(\d+)', views.test) ,有名分组支持多个test(r'^test/(?P\+d)/(?P\d+)/', views.test)

三. 反向解析

  本质其实就是返回一个能够返回对应url的地址

  1.先给url和视图函数对应关系起别名  

url(r'^del_user/(\d+)', views.del_user, name='delete')

  2. 反向解析

  后端反向解析,后端可以在任意位置通过reverse反向解析出对应的url

from django.shortcuts import render,HttpResponse, redirect, reverse
reserve('delete')

  前端反向解析

  无名分组反向解析

  url(r'^index/(\d+)/$',views.index,name='kkk')

  后端反向解析    reverse('kkk',args=(1,))  # 后面的数字通常都是数据的id值

  前端反向解析     {% url 'kkk' 1%}   # 后面的数字通常都是数据的id值

  有名分组反向解析   同无名分组方向解析意义的方法

  url(r'^index/(?P\d+)/$',views.index,name='kkk')

  后端方向解析
  print(reverse('kkk',args=(1,))) # 推荐你使用上面这种 减少你的脑容量消耗
  print(reverse('kkk',kwargs={'year':1}))
  前端反向解析
  1 # 推荐你使用上面这种 减少你的脑容量消耗
  1

  特别注意: 在同一个应用下,别名千万不能重复

四. 路由分发

  当Django项目比较庞大的时候,路由与视图函数对应关系特别多,那么总路由url.py代码太过冗长, 不易维护 ,这时候每个应用都可以有自己的urls.py, static文件夹,templates文件夹,正是基于这些条件,可以实现多人分组开发,等多人开发完成之后,我们只需创建一个空的Django项目,然后将多人开发的APP全部注册进来,在总路实现一个路由分发,而不做路由匹配.

  当应用下的视图函数特别多的时候, 可以建一个views文件夹,里面根据功能的细分再建不同的py文件

urlpatterns = [

  url(r'^admin/', admin.site.urls),
  url(r'^app01/',include('app01.urls')),
  url(r'^app02/',include('app02.urls')),

  ]

  

五. 伪静态

  静态网页: 数据是写死的  万年不变

  伪静态网页的设计是为了增加百度等搜索引擎seo查询力度, 其实所有的搜索引擎都是一个巨大的爬虫程序, 网站优化相关, 通过伪静态确实可以提高网站被查询出来的概率,但是再怎么优化也抵不过RMB玩家

 

六. 虚拟环境

  一般情况下,我们会给每一个项目,配备该项目所需要的模块, 不需要的一概不装虚拟环境,就类似于为每个项目量身定做的解释器环境,每次创建一个虚拟环境,就类似于友下载了一个全新的Python解释器,重新下载第三方库等你所需要的.

 

七. Django版本的区别

  Django1.x跟Django2.x版本区别: 路由层1.x用的是url,而2.x用的是path,  2.x版本中的path的第一个参数不再是正则表达式,而是些什么就匹配什么,是精准匹配,当使用2.x不习惯的时候, 2.x还有一个叫re_path , 2.x中的re_path就是1.x的url

 



  

 

转载于:https://www.cnblogs.com/panshao51km-cn/p/11538257.html

你可能感兴趣的:(django之路由系统)