2-django、http、web框架、django及django请求生命周期、路由控制、视图层

1 http
2 web框架
3 django
3.1 django请求生命周期
4 路由控制
5 视图层

1 http

#1 http 是什么
#2 http特点
#3 请求协议详情-请求首行---》请求方式,请求地址,请求协议版本-请求头---》key:value形式-referer:上一次访问的地址-user-agenet:客户端类型-name:lqz-cookie:只要是当前域【https://www.cnblogs.com/】中有的cookie,当次请求就会携带-请求体:get请求一般没有请求体
#4响应协议详情-响应首行:响应协议版本,响应状态码,响应描述-响应头:key-value形式    cookie带在响应头中---》浏览器会把它存到浏览器的cookie中-响应体:浏览器页面中看到的东西 ---》html标签# 4 响应状态码# 5 URL简介 统一资源定位符
统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它###格式:协议://IP:端口(80)/路径?name=lqz&age=18
http协议,如果不写端口号--》默认是80?之前的是请求路径,?之后的是请求数据部分# 补充:post 既能带在地址栏中数据,又能带在请求体中数据get请求一般都带在地址栏中
# 补充:-请求一个网址:https://www.cnblogs.com/liuqingzheng/articles域名(https://www.cnblogs.com)+路径(liuqingzheng/articles)-携带数据到后端:有哪几种方式?1 带在地址栏中 域名+路径+参数https://www.cnblogs.com/liuqingzheng/articles?name=xx&age=111django从:requets.GET    request.get_full_path2 带在请求体中---》http的请求体--》多种编码格式-json:后期会使用它多-urlencoded:form表单,默认-form-data:传文件django从:request.POST   request.body3 带在请求头中django中哪里取  request.META--->取出请求头-服务端响应给客户端数据-响应头中-用的最多:响应体$.ajax({path:/login/?name=lqz,data:{}})----->写成这样---》最终它会变成一个http请求,写的path实际是请求路径,写的data就是请求体

image

http协议补充

# http 基于tcp的---》可靠传输#http协议 0.9版本
客户端----》服务端
建立tcp的链接---》三次握手
客户端给服务端发送消息---》借助于tcp通道
服务端给客户端回消息----》借助于tcp通道
断开tcp的链接----》四次挥手# http 主流 1.1 ---》keep-alive---》时间---》过了时间---》tcp就会断开
客户端同时发送两个http请求
客户端----》服务端
建立tcp的链接---》三次握手
---第一次请求----
客户端给服务端发送消息---》借助于tcp通道
服务端给客户端回消息----》借助于tcp通道
---第二次请求----
客户端给服务端发送消息---》借助于tcp通道
服务端给客户端回消息----》借助于tcp通道
断开tcp的链接----》四次挥手# http 2.x版本---->多路复用
客户端同时发送5个http请求
客户端----》服务端
建立tcp的链接---》三次握手
tcp是流式协议---》一次带了一些数据 【请求1的数据,请求2的数据,请求3的数据,请求4的数据,请求5的数据 】
tcp的响应---》一次性带回来了断开tcp的链接----》四次挥手# http 3.x版本---》使用udp+协议 保证了可靠

2 web框架

# 1 web 框架是什么---》别人帮咱们写了一些基础代码---》我们只需要在固定的位置写固定的代码--》就能实现一个web应用
Web框架(Web framework)是一种开发框架,用来支持动态网站、网络应用和网络服务的开发。这大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方法。web框架已经实现了很多功能,开发人员使用框架提供的方法并且完成自己的业务逻辑,就能快速开发web应用了。浏览器和服务器的是基于HTTP协议进行通信的。也可以说web框架就是在以上十几行代码基础张扩展出来的,有很多简单方便使用的方法,大大提高了开发的效率# 2 python界有个协议  wsgi协议客户端浏览器和         ---------------------->      python web框架之间通信需要遵循这个协议发出来的是http请求    符合wsgi协议的web服务器         django,flask  requset response基于这个协议的web服务器-wsgiref:django框架默认就用它---》性能低,并发量低--》测试阶段使用-uwsgi:c语言写的-gunicorn:python写的协议到底怎么规定的:web服务器后面的  python框架一定是一个可调用的对象,必须接收两个参数(environ, start_response)--->environ它是个字典----》里面全是http请求的东西# 3 使用wsgiref写个web服务    from wsgiref.simple_server import make_serverdef mya(environ, start_response):print(environ)start_response('200 OK', [('Content-Type', 'text/html')])if environ.get('PATH_INFO') == '/index':with open('index.html','rb') as f:data=f.read()elif environ.get('PATH_INFO') == '/login':with open('login.html', 'rb') as f:data = f.read()else:data=b'<h1>Hello, web!</h1>'return [data]# 可调用对象---》能加括号执行的对象
if __name__ == '__main__':myserver = make_server('', 8011, mya) # 请求来了---》经过wsgiref---》调用后面的可调用对象--》传入两个参数(environ, start_response)print('监听8011')myserver.serve_forever()

3 django

# 1 MVC与MTV模型  --->所有web框架其实都遵循mvc架构# MVC  本来坨在一起的代码,拆到不同的位置模型(M:数据层),控制器(C:逻辑判断)和视图(V:用户看到的)三层他们之间以一种插件式的、松耦合的方式连接在一起,模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求# MTVM 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。M就是原来的MT 代表模板 (Template):负责如何把页面展示给用户(html)。T就是原来的VV 代表视图(View): 负责业务逻辑,并在适当时候调用Model和TemplateV+路由 是原来的C# 补充软件版本3.6.小版本      后面小版本只做bug修改3.7.小版本# 2 下载djagno   1.x  2.x  3.x    4.x-统一都用:pip3 install django==3.2.20-卸载掉原来的--》装上这个-pip uninstall django  #卸载-pip3 install django==3.2.20-pip3 install django # 如果不指定版本就会装最新-会在python安装目录下的script文件夹多出一个可执行文件 django-admin-用来创建djagno项目的-命令创建django-admin startproject 项目名-使用pycharm创建---》本质也是在执行这个命令,编辑器帮咱们做了# 3 django目录结构# 4 启动项目-python  manage.py runserver 0.0.0.0:8080-运行在127.0.0.10.0.0.0上的区别-pycharm中点击绿色箭头运行# 5 请求声明周期

在这里插入图片描述

3.1 django请求生命周期

Django请求生命周期
1、wsgi:创建socket服务端,用于接收用户请求并对请求进行初次封装
2、Middleware:对所有请求到来之前、响应之前,定制一些操作。
3、URL:路由匹配,在URL和视图函数对应关系中,根据当前请求URL找到相应的函数。
4、Views:执行视图函数 一 业务处理,【通过ORM去数据库中获取数据,再去拿横板,然后将数据和横板清染】
5、再经过所有中间件(process_response)
6、通过wsgi将响应返回给用户。

在这里插入图片描述

4 路由控制

# 1 路由是什么
URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表;你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码对应执行
请求路径和要执行的视图函数的对应关系# 2 如何使用-path:准确路径,精准匹配---》以后基本都是path-re_path---》就是原来的url---》正则匹配---》非常少-放在列表中:urlpatterns = []--->列表中得数据,必须是 path或re_path执行完的结果# 3 path详细使用path('admin/', login)---》等价于:_path(route, view, kwargs=None, name=None)第一个参数:准确路径,字符串转换器: '<int:pk>'  '<str:name>' -127.0.0.1:8080/login/justin---->path('login/<str:name>', admin.site.urls),-视图函数中 def login(request,name)第二个参数: 视图函数的内存地址  不要加括号-路由一旦匹配成功,就会执行 你写的这个视图函数(request),并且会把request对象传入-如果有分组的参数[有名,无名],或者转换器的参数,都会被传递到视图函数中作为参数-总结:放要放视图函数地址---》但是视图函数的参数:第一个是固定必须是request,后续的取决于写没写转换器,写没写有名无名分组第三个参数:kwargs 是给视图函数传递默认参数第四个参数:路径的别名---》后期使用反向解析得到该路径# 4 re_path的详细使用跟path除了第一个参数不一样,其他完全一样第一个参数是:正则表达式后期用的很少,危险性大---》原来之所以支持正则的目的是为了分组出参数path通过转换器能完成这个操作--》于是--》这个几乎不用# 5 反向解析--->用在视图函数中,用在模板中-没有转换器的情况:path('login/', login,name='login')res=reverse('login')  #当时 定义路径传入的name参数对应的字符串-有转换器的情况:path('login/<str:name>', login,name='login')res=reverse('login',kwargs={name:lqz})  #当时 定义路径传入的name参数对应的字符串生成这种路径:'login/lqz'# 6 路由分发-为什么默认路由匹配就匹配到了 urls.py ?-settings.py 有配置的-ROOT_URLCONF = 'django_demo02.urls'-一个app自己有自己的路由-在app下创建urls.py 

5 视图层

# 1 views.py 这个文件---》目前写的是视图函数# 2 视图函数必须写成这样
def 视图函数(request):return 四件套# 3 request对象-它是http请求(数据包---》字符串形式)---》拆分成了django中得request对象-常用的:request.pathrequest.methodrequest.GETrequets.POSTrequets.bodyrequest.get_full_path()  # 方法request.files   # 前端携带文件过来---》转成了字典,根据文件的名字取到文件对象-不常用request.cookierequest.sessionrequest.content_type  # 提交的编码格式:urlencoded(form表单),json,form-data,text/plain(一般不用,浏览器默认的格式)request.META: 请求头中得数据user-agent:HTTP_USER_AGENTreferer:客户端ip地址:REMOTE_ADDR用户自定义的  定义:name=lqz取:request.META.get('HTTP_NAME')  # 前面加HTTP_ 把自定义的转成大写-request.user  # auth-request.is_ajax()  # 4 四件套#5 cbv
# 6 文件上传

补充

# 1 python 解释器安装完----》有几个重要的文件和文件夹-根路径下  python.exe-->可以复制改名---》做多版本共存-scripts文件夹:pip命令在它下面,后期咱们会装 第三模块[可能会有可执行文件,可执行文件都放在这]-Lib:一对文件夹中有 py文件-python的解释器---》有些代码是用c写的  字典,列表--->有些代码是用python自己写的 :使用语言自己写自己:自举-内置的模块自举的代码-第三方包site-package---

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/798214.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Sora是什么?Sora怎么使用?Sora最新案例视频以及常见问题答疑

Sora 是什么&#xff1f; 2024年2月16日&#xff0c;OpenAI 在其官网上面正式宣布推出文本生成视频的大模型Sora 这样说吧给你一段话&#xff0c; 让你写一篇800字的论文&#xff0c;你的理解很可能都有偏差&#xff0c;那么作为OpenAi要做文生视频到底有多难&#xff0c;下面…

科研学习|研究方法——扎根理论三阶段编码如何做?

一、背景介绍 “主题标引”意指对文献内容进行分析, 然后对文献所表达的中心思想、所讨论的基本问题以及研究的对象等进行提取, 以形成主题概念, 然后在此基础上把可检索的主题词表示出来, 再将这些主题词按一定顺序 (如字顺) 排列, 对论述相同主题内容的文献加以集中, 从而提高…

Linux下场景模拟--cpu、内存打满测试

Linux下场景模拟–cpu、内存打满测试 打满CPU占用 编写脚本vi /root/cpu_run_full.sh vi /root/cpu_run_full.sh填写如下内容&#xff1a; #!/bin/bash function while_run_cpu() {while true;doi2;done }function cpu_full() {for ((i0; i<$1; i));dowhile_run_cpu &am…

css伪类:last-child或:first-child不生效

目录 一、问题 二、原因及解决方法 三、总结 tiips:如嫌繁琐&#xff0c;直接移步总结即可&#xff01; 一、问题 1.想使用伪类:last-child给 for循环出来的最后一个元素单独添加样式。但是发现无论怎么写都没有添加上去。 2.真是奇怪呀&#xff0c;明明写的没有问题呀&a…

云备份day04

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C云备份项目 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 主要内容介绍了文件工具了类的实现 文章目录 云备份day041.文件…

Matlab应用层生成简述

基础软件层 目前接触到的几款控制器&#xff0c;其厂商并没有提供simulink的基础软件库一般为底层文件被封装为lib&#xff0c;留有供调用API接口虽然能根据API接口开发基础软件库&#xff0c;但耗费时间过长得不偿失 应用层 所以可以将应用层封装为一个子系统&#xff0c;其…

Vue3组件基础示例

组件是vue中最推崇的&#xff0c;也是最强大的功能之一&#xff0c;就是为了提高重用性&#xff0c;减少重复性的开发。 如何使用原生HTML方法实现组件化 在使用原生HTML开发时&#xff0c;我们也会遇到一些常见的功能、模块&#xff0c;那么如何在原生HTML中使用组件化呢&am…

windows通过cmd终止线程

1、使用 netstat 命令查看特定端口的占用情况。例如&#xff0c;要查看端口号为 8080 的情况&#xff0c;可以执行以下命令&#xff1a; netstat -ano | findstr :9009这将显示所有占用端口 9009的网络连接&#xff0c;并列出 PID&#xff08;进程标识符&#xff09;。 2、终止…

Steam上线真人乙游,女性玩家还愿意买单吗?

Steam上线了一款真人乙游《糟糕&#xff01;他们太爱我了怎么办&#xff1f;》&#xff08;以下简称《糟糕&#xff01;&#xff09;。 乍一听这个游戏名&#xff0c;似乎和《完蛋&#xff01;我被美女包围了&#xff01;》有异曲同工之妙&#xff0c;事实也确实如此&#xff…

data-diff,一个超强的 Python 库!

目录 前言 安装 特性 基本功能 字典比较 列表比较 集合比较 嵌套数据结构比较 高级功能 比较忽略特定字段 自定义差异显示 数据快照比较 实际应用场景 数据监测和审计 配置管理 测试验证 总结 前言 大家好&#xff0c;今天为大家分享一个超强的 Python 库 - data-diff …

挑战30天C++基本入门(DAY8--树)[part 3](速通哦~)

#上一章我们把搜索二叉树的知识给传授完毕&#xff0c;如果认真的看下去并且手打了几遍&#xff0c;基本上内部的逻辑还是可以理解的&#xff0c;那我们现在就截至继续学习树的一些重要知识啦~~ 树高怎么求呀&#xff1f;如果用上一次学的层次遍历来求树高&#xff0c;有点小题…

Redis分布式锁的实现核心思路

4.2 、Redis分布式锁的实现核心思路 实现分布式锁时需要实现的两个基本方法&#xff1a; 获取锁&#xff1a; 互斥&#xff1a;确保只能有一个线程获取锁非阻塞&#xff1a;尝试一次&#xff0c;成功返回true&#xff0c;失败返回false 释放锁&#xff1a; 手动释放超时释放&…

面试篇:杂乱篇

String s " "; 1. String类的常用方法有哪些&#xff1f; s.length()&#xff1a; 返回字符串长度s.substring()&#xff1a; 截取字符串s.split()&#xff1a; 分割字符串s.equlas()&#xff1a; 字符串比…

Chapter 1 Basic Concepts of Communication and Communication Systems

1.1 The Concept of Communication communication【通信】:It is the process of using signals to transmit messages containing information in space. To put it simply, communication is the spatial transmission of information【信息的空间传递】Information【信息】…

【JavaWeb】Day35.MySQL概述——数据库设计-DDL(二)

表操作 关于表结构的操作也是包含四个部分&#xff1a;创建表、查询表、修改表、删除表。 1.创建 语法 create table 表名( 字段1 字段1类型 [约束] [comment 字段1注释 ], 字段2 字段2类型 [约束] [comment 字段2注释 ], ...... 字段n 字段n类型 [约束] [comment …

藏不住了!这20个技术点是运维老手的秘密武器

你们好&#xff0c;我的网工朋友。 信息技术系统的正常运行直接关系到企业或生产的正常运行。 然而&#xff0c;网工经常面临以下问题&#xff1a;网络速度慢、设备故障和应用系统效率低。 任何信息技术系统的故障&#xff0c;如果不及时处理&#xff0c;都会产生很大的影响…

P2089 烤鸡、P1706 全排列问题、P1157 组合的输出、P1036 [NOIP2002 普及组] 选数——Python代码实现(带注释)

P2089 烤鸡 题目背景 猪猪 Hanke 得到了一只鸡。 题目描述 猪猪 Hanke 特别喜欢吃烤鸡&#xff08;本是同畜牲&#xff0c;相煎何太急&#xff01;&#xff09;Hanke 吃鸡很特别&#xff0c;为什么特别呢&#xff1f;因为他有 1010 种配料&#xff08;芥末、孜然等&#xf…

【优选算法专栏】专题十六:BFS解决最短路问题(一)

本专栏内容为&#xff1a;算法学习专栏&#xff0c;分为优选算法专栏&#xff0c;贪心算法专栏&#xff0c;动态规划专栏以及递归&#xff0c;搜索与回溯算法专栏四部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小…

串口和 蓝牙模块HC08

串口基本认知 串行接口简称串口&#xff0c;也称 串行通信 接口或 串行通讯接口 &#xff08;通常指 COM 接口 &#xff09;&#xff0c;是采用串行通信方 式的 扩展接口 。串行 接口&#xff08;Serial Interface &#xff09;是指数据一位一位地顺序传送。其特点是 通信线路…

优秀企业都在用的企微知识库,再不搭建就晚了!

每个团队都在寻找让工作效率提升的方法。如果你想知道哪些团队能够高效地完成任务&#xff0c;而另一些却步履维艰&#xff0c;那么答案可能就是“企业微信知识库”。见过很多团队都在使用它&#xff0c;而且效果非常显著。如果你还没有搭建属于自己的企微知识库&#xff0c;可…