一. 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
无名分组和有名分组不能混合使用, 但是在一种分组下,可以使用多个,无名分组支持多个,url(r'^test/(\d+)/(\d+)', views.test) ,有名分组支持多个test(r'^test/(?P
三. 反向解析
本质其实就是返回一个能够返回对应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
后端方向解析
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