# 路由匹配
path('test', views.test),
path('testadd', views.testadd),
无法跳转到
testadd
# 路由匹配
path('test/', views.test),
path('testadd/', views.testadd),
在参数尾部加一个
/
url
的时候会默认加一个 /
/
再尝试一次
- 在配置文件中,有一个参数可以帮助我们干这件事
APPEND_SLASH = True
- 这个参数默认为True,即自动帮我们加
/
re_path('^test/$', views.test),
这才是完整版的路由匹配格式
re_path('^$', views.test),
匹配首页的路由格式
# django2中
path('admin/', admin.site.urls), # 精准匹配,不支持正则表达式
path('test/', views.test), # 精准匹配,不支持正则表达式
re_path(r'^test/$', views.test) # url(r'^test/$', views.test),
无名分组
url(r'^test/(\d+)$', views.test),
get请求的第一种方式:
http://127.0.0.1:8000/test/?a=1&b=2
get请求的第二种方式:
http://127.0.0.1:8000/test/123/11
#有名分组
url(r'^test/(?P\d+)/(?P\d+)$', views.test),
无名分组和有名分组不能混用
但是同一个分组可以使用多次
# 无名有名混合使用
url(r'^test/(?P\d+)/(\d+)$', views.test),
通过一些方法得到一个结果,该结果可以直接访问到对应的url,触发视图函数
先给路由与视图函数起一个别名
url(r'^v1/v2/v3/home$', views.home, name='home'),
反向解析
后端反向解析
res=reverse('home') # /v1/v2/v3/home
print(res)
xxxx
本质上还是通过一些方法得到一个结果,该结果可以访问到对应的url从而触发相应的视图和功能
#无名分组反向解析
url(r'^v1/v2/v3/home/(\d+)/(\d+)/$', views.home, name='home')
# 后端解析
res=reverse('home', args=(123, 11)) # /v1/v2/v3/home/1
print(res)
# 前端解析
点我看美女
#有名分组反向解析
url(r'^v1/v2/v3/home/(?P\d+)/(?P\d+)/$', views.home, name='home')
# 后端解析
res=reverse('home', args=(123, 11)) # /v1/v2/v3/home/1
res=reverse('home', kwargs={'year':123, 'mon':1}) # /v1/v2/v3/home/1
print(res)
# 前端解析
点我看美女
Django每一个应用都可以拥有属于自己的
正是基于上述的特点,Django可以很好的做到自己的分组开发(每个人只写自己的app)
最后只需要将所有的app拷贝到新的文件,并将这些APP注册到配置文件中,然后再利用路由分发的特点,将所有的APP整合起来
当一个项目中的URL特别多的时候,总路由urls.py的代码非常冗余而且不好维护,这个时候就可以利用路由分发来减轻总路由的压力
利用路由分发之后,总路由不再干预路由与视图函数的直接对应关系
# 路由的分发
url(r'^app01/', include(app01_urls)),
url(r'^app02/', include(app02_urls)),
# 第二种方式
url(r'^app01/', include('app01.urls')),
url(r'^app02/', include('app02.urls')),
分发的路由第一个参数最后一个不要加 $
# 第二种方式
url(r'^app01/', include('app01.urls', namespace='app01')),
url(r'^app02/', include('app02.urls', namespace='app02')),
# 解析
res=reverse('app01:login', args=(11,22)) # /v1/v2/v3/home/1
res=reverse('app02:login', args=(11,22)) # /v1/v2/v3/home/1
只要保证名字不冲突,就没必要使用名称空间
一般情况下,有多个app的时候只要在前面加上app的前缀,这样就能够确保多个app之间名字不冲突
动态页面:
它不是在html页面中写死的,它是根据后端的数据变化而变化
我们的页面上的数据是从数据库查询出来都是可以是动态页面
案例:
https://www.cnblogs.com/bigsai/p/17827160.html 这个就是伪装之后的页面
伪装的目的:
为了更好的被各大搜索引擎抓大,静态页面是最容易被抓到的,有个别的网站就会做伪装,seo
seo:优化关键词被容易搜索到
sem: 广告(RMB)
怎么样去伪装
url(r'^v1/v2/test.html/$', views.test)
虚拟环境:
每创建一个虚拟环境就类似于重新下载了一个纯净的python解释器
但是虚拟器不建议下载太多,创建虚拟环境是需要消耗磁盘空间的
模块管理文件:
每个项目都需要用到很多模块,并且每个模块的版本可能是不一样的
这种情况下我们会给每一个项目配备一个requirements.txt文件,里面存放着我们这个项目所安装的所有模块及版本
只需要一条命令即可安装所有模块及版本
Django默认支持以下5个转化器:
● str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
● int,匹配正整数,包含0。
● slug,匹配字母、数字以及横杠、下划线组成的字符串。
● uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
● path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)