day55 反向解析和视图层精确定位

news/2024/7/24 12:12:00 标签: 数据库, django

上周内容回顾

orm的增删改查
1. 查询
from app01 import models
models.UserInfo.objects.all() # 查询所有的字段信息和数据
res=models.UserInfo.objects.first() # 查询一条,而且是第一条,queryset对象,列表套对象的形式
if res:
    res[0]
try:
    res[0]
# 它是支持索引取值的,如果是第一条就直接first()
select * from userinfo where username ='' and password = '';
res=models.UserInfo.objects.filter(username='', password='').first() # and
res=models.UserInfo.objects.filter(username='').filter(password='').filter().first() # and
"""链式表达式的思想,jQuery中也有这样的写法"""
models.UserInfo.objects.all()[0]
models.UserInfo.objects.all()[0:2] # 支持切片
​
2. 增加
models.UserInfo.objects.create(username='', password='')
​
res=models.UserInfo(username='', password='')
res.save() # 真正的操作数据库
​
3. 修改
models.UserInfo.objects.filter(pk=1).update(username='', password='')
res=models.UserInfo.objects.first()
res.username='';
res.password=''
res.save() # 真正的操作数据库
​
4. 删除
models.UserInfo.objects.filter(pk=1).delete()
res.delete()
如何创建表关系
一对一:外键字段(都可以,推荐在查询频率较高的一方)
一对多: 外键字段(在多的一方)
多对多:外键字段在第三张表中
​
# django1.x
models.OneToOneField(to='', to_field='')
models.ForeignKey(to='', to_field='')
models.ManyToManyField(to='')
# django2.x以上都要这么去写
models.OneToOneField(to='', to_field='', on_delete=models.CASCADE)
models.ForeignKey(to='', to_field='', on_delete=models.CASCADE)
models.ManyToManyField(to='')
Django的请求生命周期流程图
"""必会会画!还要能够说出每一部分的相关知识点""" # 面试问

今日内容概要

路由层
  • 无名分组 有名分组

  • 反向解析

  • 无名分组反向解析

  • 有名分组反向解析

  • 路由分发

  • 伪静态的概念(了解)

  • 名称空间(了解)

  • 虚拟环境(了解)

  • django1.x和django2.x的区别

视图层

  • 三板斧

  • 序列化模块(dumps JsonResponse类)

  • form表单上传文件

  • FBV(function based view)和CBV(class based view)

  • 视图文件中可以是函数也可以是类

今日内容详细

路由层
url(r'^test/$', views.test),
url(r'testadd', views.testadd),
## 首页的地址
url(r'^$', views.home),
​
# django2中
path('admin/', admin.site.urls), # 精准匹配,不支持正则表达式
path('test/', views.test), # 精准匹配,不支持正则表达式
re_path(r'^test/$', views.test) # url(r'^test/$', views.test),
​
​
# url方法的第一个参数支持的是正则表达式
无名分组
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<year>\d+)/(?P<month>\d+)$', views.test),
  
# 有名分组就是把正则中小括号里的匹配到的内容以关键字参数的形式传递给视图函数
有名和无名是否能够混合使用
 url(r'^test/(?P<year>\d+)/(\d+)$', views.test),
 # 不要混合使用,要么无名,要么有名,但是,无名、有名可以使用多次
​
"""无名有名分组的使用可以有了接收参数的方法"""
反向解析
就是每一个路由都可以起一个别名,通过Django提供的一些方法去解析这个别名,得到一个别名对应的路由
url(r'^v1/v2/v3/home$', views.home, name='home'),
# 后端反向解析
'''反向解析'''
res=reverse('home') # /v1/v2/v3/home
print(res)
​
# 前端反向解析
<a href="{% url 'home' %}">点我看美女</a>
无名有名分组反向解析
无名分组反向解析
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)
​
# 前端解析
<a href="{% url 'home' 1 123 %}">点我看美女</a>
​
​
​
有名分组反向解析
url(r'^v1/v2/v3/home/(?P<year>\d+)/(?P<mon>\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)
​
# 前端解析
<a href="{% url 'home' year=1 mon=123 %}">点我看美女</a>
路由分发
Django的全局路由文件是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
伪静态的概念(了解)
伪静态: 其实就是把动态页面改成静态页面
动态页面:
    """它不是在html页面中写死的,它是根据后端的数据变化而变化"""
    我们的页面上的数据是从数据库查询出来都是可以是动态页面
    
静态页面:
    html
     css
案例:
    https://www.cnblogs.com/bigsai/p/17827160.html # 这个就是伪装之后的页面
伪装的目的:
    """为了更好的被各大搜索引擎抓大,静态页面是最容易被抓到的,有个别的网站就会做伪装,seo"""
    seo:优化关键词被容易搜索到
    sem: 广告(RMB)
怎么样去伪装   
    url(r'^v1/v2/test.html/$', views.test)
虚拟环境(了解)
以后针对于每一个独立的项目,都会去配置一个解释器,多个项目能不能使用同一个解释器,原则上是能的
我们会针对于不同的项目单独的配置一个新的解释器
3.6 3.7 3.8 
每一个解释器只装针对于这个项目的模块
我们会使用虚拟环境:类似于是一个纯净版本的Python解释器,虚拟环境你是需要自己下载的,下载的时候,使用的是哪个Python解释器版本,下载下来的就是这个版本的解释器,纯净版的
​
"""不要频繁的创建虚拟环境,过多的虚拟环境肯定会占用资源"""
​
# 学一个命令行创建虚拟环境
django1和django2的区别
1. 路由文件
django1.x中使用的是url:支持正则
django2.x中使用的是path(不支持正则:精准匹配)和re_path(url):支持正则
path:但是它只支持五种转换器
​
​
Django默认支持以下5个转化器:
​
● str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
● int,匹配正整数,包含0。
● slug,匹配字母、数字以及横杠、下划线组成的字符串。
● uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
● path,匹配任何非空字符串,包含了路径分隔符(/)(不能用?)
​
自定义转化器
2. 创建表关系
    django2中必须指定参数:on_delete:
    djanxo1中不用指定:级联更新级联删除

http://www.niftyadmin.cn/n/5176783.html

相关文章

浅谈掌动智能验收测试主要服务内容

所谓验收测试是对软件的功能性、性能效率、兼容性、易用性、可靠性、信息安全性、维护性、可移植性进行测试&#xff0c;对产品说明、用户文档集进行审阅&#xff0c;为科研项目、信息工程项目等进行第三方验收评测&#xff0c;交付验收测试报告。本文将介绍掌动智能验收测试主…

第27期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大型语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以…

云流量回溯的重要性和应用

云流量回溯是指利用云计算和相关技术来分析网络流量、数据传输或应用程序操作的过程。这个过程包括了对数据包、通信模式和应用程序性能的审查和跟踪。本文将介绍云流量回溯重要性和应用! 1、网络安全: 云流量回溯是网络安全的重要组成部分。通过监测和回溯网络流量&#xff0c…

pytorch框架学习(tensorboard的使用)

什么是tensorboard&#xff1f; tensorboard是一个可视化工具&#xff0c;它可以把训练过程中的数据变化以图像的形式绘制出来&#xff0c;或者记录训练过程中使用的图片 tensorboard的安装&#xff1a; 在pycharm的终端中输出安装命令后自动安装—— pip install tensorbo…

[量子计算与量子信息] 2.1 线性代数

2.1 线性代数 符号对照表 量子力学中&#xff0c;向量使用 ∣ ψ ⟩ \ket \psi ∣ψ⟩ (ket)来表示&#xff0c;可以理解为一个列向量。其对偶向量为 ⟨ ψ ∣ \bra \psi ⟨ψ∣ &#xff0c;可以理解为行向量。 向量空间中零向量直接用 0 0 0 表示&#xff0c; ∣ 0 ⟩ \…

Jmeter 性能 —— 负载阶梯场景!

1、安装阶梯测试的第三方插件->搜jpgc 选项-JMeter Plugins Manager -搜jpgc 空格&#xff0c;然后安装 2、脚本-线程组选jpgc Stepping Thread Group 最终并发数为100&#xff0c;并发数从0开始&#xff0c;5秒内增加10个并发数&#xff0c;增加10个后持续30s&#xff0c;…

使用代理IP时有哪些小技巧?大数据技术人员必看

很多大数据行业和跨境行业的用户都会使用到一个工具&#xff0c;就是代理IP工具&#xff0c;不过很多人对它的研究不深&#xff0c;其实在使用它时是有一些小技巧的&#xff0c;它不仅可以帮助我们隐蔽我们的真实IP地址&#xff0c;实现多账号矩阵运营&#xff0c;同时还能让我…

纯c语言模拟栈和队列(初学必看)

一、栈(Stack) 1.栈的概念及其结构 栈是一种特殊的线性表&#xff0c;在栈这个结构里&#xff0c;越先存进去的数据越难取出来。 这个结构就像是一个只有一端有打开的容器&#xff0c;越先放进去的球越在底部&#xff0c;想要把底部的球拿出来&#xff0c;就必须先把前面的求…