0
点赞
收藏
分享

微信扫一扫

腾讯云2核4G服务器CVM标准型S5实例租用5年价格表

悄然丝语 2023-11-14 阅读 52

【一】路由匹配

# 路由匹配
path('test', views.test),
path('testadd', views.testadd),
  • url方法第一个参数是正则表达式
    • 只要第一个参数正则表达式能够匹配到内容,就会立刻停止匹配,执行视图函数
# 路由匹配
path('test/', views.test),
path('testadd/', views.testadd),
  • 在输入 url 的时候会默认加一个 /
    • Django内部会帮助我们做一个重定向
      • 一次匹配不行
      • 那就加一个 / 再尝试一次
re_path('^test/
re_path('^test/$', views.test),
#x27;
, views.test),
re_path('^
re_path('^$', views.test),
#x27;
, views.test),
# django2中
path('admin/', admin.site.urls), # 精准匹配,不支持正则表达式
path('test/', views.test), # 精准匹配,不支持正则表达式
re_path(r'^test/
# django2中
path('admin/', admin.site.urls), # 精准匹配,不支持正则表达式
path('test/', views.test), # 精准匹配,不支持正则表达式
re_path(r'^test/$', views.test) # url(r'^test/$', views.test),
#x27;
, views.test) # url(r'^test/
# django2中
path('admin/', admin.site.urls), # 精准匹配,不支持正则表达式
path('test/', views.test), # 精准匹配,不支持正则表达式
re_path(r'^test/$', views.test) # url(r'^test/$', views.test),
#x27;, views.test),

【二】无名分组

  • 无名分组就是把正则中小括号里的匹配到的内容以位置参数的形式传递给视图函数
无名分组
url(r'^test/(\d+)
无名分组
url(r'^test/(\d+)$', views.test),
#x27;
, views.test),
get请求的第一种方式:
http://127.0.0.1:8000/test/?a=12
get请求的第二种方式:
http://127.0.0.1:8000/test/123/11

【三】有名分组

  • 可以给正则表达式起一个别名
#有名分组
url(r'^test/(?P<year>\d+)/(?P<month>\d+)
#有名分组
url(r'^test/(?P<year>\d+)/(?P<month>\d+)$', views.test),
#x27;
, views.test),
  • 有名分组就是将括号内正则表达式匹配到的内容当做关键字参数传给后面的视图函数

【四】无名有名混用


# 无名有名混合使用
url(r'^test/(?P<year>\d+)/(\d+)

# 无名有名混合使用
url(r'^test/(?P<year>\d+)/(\d+)$', views.test),
#x27;
, views.test),

【五】反向解析

  • 通过一些方法得到一个结果,该结果可以直接访问到对应的url,触发视图函数

  • 先给路由与视图函数起一个别名

url(r'^v1/v2/v3/home
url(r'^v1/v2/v3/home$', views.home, name='home'),
#x27;
, views.home, name='home'),
  • 反向解析

    • 后端反向解析

res=reverse('home') # /v1/v2/v3/home
print(res)
  • 前端反向解析
<a href="{% url 'home' %}">xxxx</a>

【六】无名有名分组反向解析

【1】无名分组反向路由解析

(1)引入
1.1 路由
#无名分组反向解析
url(r'^v1/v2/v3/home/(\d+)/(\d+)/
#无名分组反向解析
url(r'^v1/v2/v3/home/(\d+)/(\d+)/$', views.home, name='home')
#x27;
, views.home, name='home')
1.2后端解析
# 后端解析
res=reverse('home', args=(123, 11)) # /v1/v2/v3/home/1
print(res)
1.3前端解析
# 前端解析
<a href="{% url 'home' 1 123 %}">点我看美女</a>
  • 这个数字存在的意义到底是什么?
    • 数字一般情况下放的是数据的主键值
    • 数据的标记和删除功能

【2】有名分组反向解析

2.1 路由
#有名分组反向解析
url(r'^v1/v2/v3/home/(?P<year>\d+)/(?P<mon>\d+)/
#有名分组反向解析
url(r'^v1/v2/v3/home/(?P<year>\d+)/(?P<mon>\d+)/$', views.home, name='home')
#x27;
, views.home, name='home')
2.2 后端解析
# 后端解析
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)
2.3 前端解析
# 前端解析
<a href="{% url 'home' year=1 mon=123 %}">点我看美女</a>

【七】路由分发

  • Django每一个应用都可以拥有属于自己的

    • templates文件夹
    • urls.py
    • static文件夹
  • 正是基于上述的特点,Django可以很好的做到自己的分组开发(每个人只写自己的app)

  • 最后只需要将所有的app拷贝到新的文件,并将这些APP注册到配置文件中,然后再利用路由分发的特点,将所有的APP整合起来

  • 当一个项目中的URL特别多的时候,总路由urls.py的代码非常冗余而且不好维护,这个时候就可以利用路由分发来减轻总路由的压力

  • 利用路由分发之后,总路由不再干预路由与视图函数的直接对应关系

    • 而是做一个分发处理
    • 识别当前的url是属于哪个应用下的,直接分发给对应的应用去处理
# 路由的分发
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

【九】伪静态

  • 静态网页
    • 数据是写死的
  • 伪静态
    • 将一个动态网页伪装成静态网页
  • 伪装的目的在于增大本网站的seo查询力度
    • 并且增加搜索引擎收藏本网页的概率
  • 搜索引擎本质上就是一个巨大的爬虫程序

案例:

https://www.cnblogs.com/bigsai/p/17827160.html   这个就是伪装之后的页面

伪装的目的:

怎么样去伪装

url(r'^v1/v2/test.html/
url(r'^v1/v2/test.html/$', views.test)
#x27;
, views.test)

【十】虚拟环境

  • 在正常开发中,我们会给每一个项目独有的解释器环境
  • 该环境内只有该项目用到的模块,用不到的一概不装

【十一】Django1和Django2的区别

【1】路由匹配规则

  • Django1.x路由层使用的是url方法
  • 在Django2.x版本以后在路由层使用的是path方法
    • url() 第一个参数支持正则
    • path() 第一个参数不支持正则,写什么就匹配到什么

Django默认支持以下5个转化器:

● str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
● int,匹配正整数,包含0。
● slug,匹配字母、数字以及横杠、下划线组成的字符串。
● uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
● path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)
 

【2】自定义转换器

  • Django支持自定义转换器
  • 创建表关系
    • django2中必须指定参数:on_delete:
    • djanxo1中不用指定:级联更新级联删除
举报

相关推荐

0 条评论