【1】无名分组
无名分组:就是把正则中小括号里噩匹配到的内容以位置参数的形式传递给视图函数
url(r'^test/(\d+)$',view.text)
get请求的第一种方式:
http://127.0.0.1:8000/test/?a=1&b=2
get请求的第二种方式:
http://127.0.0.1:8000/test/12/1
【2】有名分组
有名分组:就是把正则中括号里的匹配的内容以关键字参数的形式传递给视图函数
url(r'^test/(?P<year\d+>)/(?P<mon\d+>)$',view.test)
【3】有名分组和无名分组是否可以使用多次
有名分组和无名分组不要混合使用,要么全是有名分组,要么全是无名分组
有名分组和无名分组可以多次使用
有名分组合无名分组的使用有了接收参数的方法
【4】反向解析
反向解析的概念:
反向解析就是每一个路由都可以起一个别名,通过Django提供的一些方法去解析这个别名,得到一个别名对应的路由。
url(r'^v1/v2/home$',view.home,name='home')
【4.1】后端反向解析
后端反向解析就是要使用reverse()方法
res = reverse('home') print(res)'''home就是别名的名字'''
【4.2】前端反向解析
前端反向解析就是使用 {% %}
<a href"{% url 'home' %}"=>点击</a>
【4.3】有名分组和无名分组的反向解析
【4.3.1】无名分组的反向解析
url(r'v1/v2/home/(\d+)$',view.home,name='home')# 后端解析res = reverse('home',args=(12,)) # 解析出来的地址:v1/v1/home
print(res)# 前端解析<a href="{% url 'home' 1 %}">点击</a>
【4.3.2】有名分组的反向解析
url(r'^v1/v2/home/(?P<year>\d+)/(?P<mon>\d+)/$',view.home,name='home')# 后端反向解析res = reverse('home',kwargs={year:1,mon:2})res = reverse('home' args=(1,2))'''args和kwargs都可以接收到参数'''print(res)# 前端的反向解析<a href={% url 'home' year=21 mon=3 %}>点击</a>
【5】路由分发
【5.1】全局路由文件(主路由文件)
Django的全局路由文件就是urls.py
【5.2】为什么要使用路由分发?
随着Django项目的浮渣程度越来越大,路由肯定也会越来越多,总路由文件中的路由地址就会越来越多。会导致总路由文件不好关系,不够清晰。路由分发可以很好的解决这个问题
【5.3】如何使用路由分发
路由分发:就是在每个web应用的下面都分发一个路由(子路由)
注意:路由分发以后,总路文件就不作为地址匹配了,只是为了分发而已
路由分发:需要导入include方法
from django.urls import path,include
第一种方式:
在总路由文件中导入每个web应用的子路由文件,不同的路由文件的名字可能存在重复的可能性,可以通过起别名的方式(as)进行区分
from django.urls import path,includefrom app01 import urls as app01_urlsfrom app02 import urls as app02_urls# 路由分发url(r'^app01/',include(app01_urls)),url(r'^app02/',include(app02_urls)),
第二种方式:
url(r'^app01/',include('app01.urls')), url(r'^app02/',include('app02.urls')),'''第二种方式可以不用导入w每个web应用的路由地址'''
注意:分发的路由第一个参数最好不要加$
【6】名称空间
用于解决,在反向解析时,不同应用起的别名可能一致的问题。
第一种方式:就在在反向解析时就注意下别名的定义
第二种方式:
url(r'^app01/',include('app01.urls',namespace='app01')), url(r'^app02/',include('app02.urls',namespace='app02')),'''解析'''res = reserve('app01:login',arg=(11,22)) res = reserve('app02:login',args=(11,222))
【7】伪静态的概念
【7.1】静态文件和动态文件
动态文件:它是根据后端的数据变化而变化,不是在html页面中固定的,
从数据库查询出来都是动态页面
静态页面:在html文件内中写死了,不会变化。例:html,css等
【7.2】伪装的作用
为了更好的被各大搜素引擎抓到。静态页面最容易被抓住,动态页面比较难抓
两种方式:
seo:优化关键字被容易搜索到
sem:广告
【7.3】如何进行伪装
在路由文件的后缀中.html就行
url(r'^v1/v2/test.html/$',views.test)
【8】虚拟环境
针对每一个项目,都会去配置一个解释器,原则上多个项目可以使用同一个解释器
针对不同的项目单独配置一个新的解释器,每一个解释器只装针对这个项目的模块
虚拟环境就是纯净版本的python解释器。
虚拟环境需要自己下载,是哪个python解释器的版本,下载的就是这个版本的解释器
无必要的话不要频繁的创建虚拟环境,过多的虚拟环境会占用资源
【9】django1和django2的区别
1、路由文件:
django1.x中使用的是url:支持正则
django2.x中使用的是path:不支持正则,是精准匹配(写的是什么就按什么查找)
django2.x中还使用re_path:re_path相当于django1.x中的url
path:支持5种转换器
Django默认支持的5个转换器:
转化器名称 转化器使用范围 str 匹配除了分隔符(/)之外的非空字符串,这是默认的形式 int 匹配正整数,包含0 slug 匹配字母、数字以及横杠、下划线组成的字符串 uuid 匹配格式化的uuid,如075194d3-6885-417e-a8a8-6c931e272f00 path 匹配任何费控字符串,包含了路径分隔符(/),(不能用?)
1.1、自定义转换器
2、创建表关系:
django1中不用指定on_delete,级联删除,级联更新
django2中必须指定参数:on_delete:CASCADE