Pythonweb框架总结——Django

Pythonweb框架总结——Django

2023年7月20日发(作者:)

Pythonweb框架总结——Django1、长连接和短连接⾸先介绍下短链接和长连接的区别:短连接连接->传输数据->关闭连接⽐如HTTP是⽆状态的的短链接,浏览器和服务器每进⾏⼀次HTTP操作,就建⽴⼀次连接,但任务结束就中断连接。因为连接后接收了数据就断开了,所以每次数据接受处理不会有联系。 这也是HTTP协议⽆状态的原因之⼀。长连接连接->传输数据->保持连接 -> 传输数据-> ...........->直到⼀⽅关闭连接,多是客户端关闭连接。长连接指建⽴SOCKET连接后不管是否使⽤都保持连接,但安全性较差。什么时候⽤长连接,短连接?长连接多⽤于操作频繁,点对点的通讯,⽽且连接数不能太多情况。每个TCP连接都需要三步握⼿,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不⽤建⽴TCP连接。例如:数据库的连接⽤长连接, 如果⽤短连接频繁的通信会造成socket错误,⽽且频繁的socket 创建也是对资源的浪费。⽽像WEB⽹站的http服务⼀般都⽤短链接,因为长连接对于服务端来说会耗费⼀定的资源,⽽像WEB⽹站这么频繁的成千上万甚⾄上亿客户端的连接⽤短连接会更省⼀些资源,如果⽤长连接,⽽且同时有成千上万的⽤户,如果每个⽤户都占⽤⼀个连接的话,那可想⽽知吧。所以并发量⼤,但每个⽤户⽆需频繁操作情况下需⽤短连好。2、常见的返回状态码状态码1XX2XX3XX4XX5XX响应类别信息性状态码(Informational)成功状态码(Success)重定向状态码(Redirection)客户端错误状态码(Client Error)服务器错误状态码(Server Error)原因短语服务器正在处理请求请求已正常处理完毕需要进⾏额外操作以完成请求客户端原因导致服务器⽆法处理请求服务器原因导致处理请求出错200 OK

请求正常处理完毕204 No Content

请求成功处理,没有实体的主体返回206 Partial Content

GET范围请求已成功处理301 Moved Permanently

永久重定向,资源已永久分配新URI302 Found

临时重定向,资源已临时分配新URI303 See Other

临时重定向,期望使⽤GET定向获取304 Not Modified

发送的附带条件请求未满⾜307 Temporary Redirect 临时重定向,POST不会变成GET400 Bad Request

请求报⽂语法错误或参数错误401 Unauthorized

需要通过HTTP认证,或认证失败403 Forbidden

请求资源被拒绝404 Not Found

⽆法找到请求资源(服务器⽆理由拒绝)500 Internal Server Error

服务器故障或Web应⽤故障503 Service Unavailable

服务器超负载或停机维护3 请解释或描述⼀下Django的架构对于Django框架遵循MVC设计,并且有⼀个专有的名词:MVTM全拼为Model,与MVC中的M功能相同,负责数据处理,内嵌了ORM框架V全拼为View,与MVC中的C功能相同,接收HttpRequest,业务处理,返回HttpReponseT全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html,内嵌了模板引擎4 简述MVC模式和MVT模式 所谓MVC就是把Web应⽤分为模型(M),控制器(C)和视图(V)三层,他们之间以⼀种插件式的、松耦合的⽅式连接在⼀起,模型负责业务对象与数据库的映射(ORM),视图负责与⽤户的交互(页⾯),控制器接受⽤户的输⼊调⽤模型和视图完成⽤户的请求MTV Django的MTV模式本质上和MVC是⼀样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django的MTV分别是值:1. M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。2. T 代表模板 (Template):负责如何把页⾯展⽰给⽤户(html)。3. V 代表视图(View): 负责业务逻辑,并在适当时候调⽤Model和Template。除了以上三层之外,还需要⼀个URL分发器,它的作⽤是将⼀个个URL的页⾯请求分发给不同的View处理,View再调⽤相应的Model和Template,MTV的响应模式如下所⽰: ⼀般是⽤户通过浏览器向我们的服务器发起⼀个请求(request),这个请求回去访问视图函数,(如果不涉及到数据调⽤,那么这个时候视图函数返回⼀个模板也就是⼀个⽹页给⽤户),视图函数调⽤模型,模型去数据库查找数据,然后逐级返回,视图函数把返回的数据填充到模板中空格中,最后返回⽹页给⽤户。5 ORMORM(对象关系映射)的作⽤是在关系型数据库和业务实体对象之间做⼀个映射,这样开发者在操作数据库的数据时,就不需要再去和复杂的SQL语句打交道,只需要简单地操作对象的属性和⽅法。在MVC/MVT设计模式中的Model模块中都包括ORMpython语法 - ⾃动翻译 - > SQL语句ORM优势(1)只需要⾯向对象编程, 不需要⾯向数据库编写代码. 对数据库的操作都转化成对类属性和⽅法的操作. 不⽤编写各种数据库的sql语句.(2)实现了数据模型与数据库的解耦, 屏蔽了不同数据库操作上的差异. 不在关注⽤的是mysql、等. 通过简单的配置就可以轻松更换数据库, ⽽不需要修改代码.ORM劣势 相⽐较直接使⽤SQL语句操作数据库,有性能损失. 根据对象的操作转换成SQL语句,根据查询的结果转化成对象, 在映射过程中有性能损失.ORM必须具备的3⽅⾯基本能⼒映射技术:将数据库的类型映射为编程语⾔⾃⾝的类型;将数据表定义映射为编程语⾔⾃⾝的类;将数据库中基于外键的关系连接转换为编程语⾔中基于对象引⽤的关系连接。CURD操作:做数据库处理时的增加、读取、更新和删除操作缓存优化:将数据库中查询到的数据以类对象的形式保存在内存中,以便之后再⽤时随时提取;将真正需要读取查询结果时才执⾏数据库的select操作,⽽不是在ORM查询命令执⾏时查询数据库ORM和数据库关系:在Django中model是你数据的单⼀、明确的信息来源。它包含了你存储的数据的重要字段和⾏为。通常,⼀个模型(model)映射到⼀个数据库表.基本情况:每个模型都是⼀个Python类,它是的⼦类。模型的每个属性都代表⼀个数据库字段。综上所述,Django为您提供了⼀个⾃动⽣成的数据库访问API。ORM的对应关系: 类--->数据表 对象--->数据⾏ 属性--->字段ORM能做的事⼉: 1.操作数据表 - >创建表/删除表/修改表 操作⾥⾯的类 2。操作数据⾏ - >数据的增加改查

注意:ORM不能创建数据库,需要⾃⼰动⼿创建数据库!

使⽤Django的ORM详细步骤: 1。⾃⼰动⼿创建数据库 创建数据库数据库名;(终端或可视化⼯具⾥) 2.在Django项⽬中设置连接数据库的相关配置(告诉Django连接哪⼀个数据库) #数据库相关的配置((与项⽬同名⽂件夹内)) DATABASES = { 'default': { 'ENGINE': '', # 连接的数据库类型 'HOST': '127.0.0.1', # 连接数据库的地址 'PORT': 3306, # 端⼝ 'NAME': "day61", # 数据库名称 'USER': 'root', # ⽤户 'PASSWORD': '123456' # 密码 } } 3.告诉Django⽤pymysql代替默认的MySQLDB连接MySQL数据库 在项⽬下app⽬录的__init__.py⽂件中,写下⾯两句: import pymysql # 告诉Django⽤pymysql来代替默认的MySQLdb l_as_MySQLdb()#(MySQLdb不⽀持中py3) 4.在app下⾯的⽂件中定义⼀个类,这个类必须继承 class 类名(): ... ⽰例: from import model # Create your models here. #ORM(数据库相关操作)相关的只能写在这个⽂件⾥,卸载⽂件⾥Django不识别 # OPM对应关系:类对应数据表,对象对应数据⾏,属性对应字段 class UserInfo(): id = eld(primary_key=True) # 创建⾃增的⼀个主键 name = eld(null=False, max_length=20) #varchar且不能为空的字段 5.终端内(项⽬⽂件夹下)执⾏两个命令,ORM⾃动按照对应关系创建数据表 1. python3 makemigrations #记录中改动内容 2. python3 migrate #吧改动翻译成SQL语句6.你对Django的认识?Django是⾛⼤⽽全的⽅向,它最出名的是全⾃动化的管理后台;只需要使⽤ORM,做简单的对象定义,它就能⾃动⽣成数据库结构、以及全功能的管理后台。Django内置的ORM跟框架内的其他模块耦合程度⾼应⽤程序必须使⽤Django内置的ORM,否则就不能享受到框架内提供的种种基于其ORM的便利。理论上可以切换掉其ORM模块,但这就相当于要把装修完毕的房⼦拆除重新装修,倒不如⼀开始就去⽑坯房做全新的装修。Django的卖点是超⾼的开发效率,其性能扩展有限;采⽤Django的项⽬,在流量达到⼀定规模后,都需要对其进⾏重构,才能满⾜性能的要求。Django适⽤的是中⼩型的⽹站,或者是作为⼤型⽹站快速实现产品雏形的⼯具。Django模板的设计哲学是彻底的将代码、样式分离; Django从根本上杜绝在模板中进⾏编码、处理数据的可能。Django的主要特点:完善的⽂档集成数据访问组件:Django的Modle层⾃带数据库ORM组件,使开发者⽆须学习其他数据库访问技术强⼤的url映射技术:Django使⽤正则表达式管理URL映射,因此给开发者带来了极⾼的灵活性后台管理系统⾃动⽣成:开发者只需要简单的⼏⾏配置和代码就可以实现完整的后台数据管理web控制台错误信息⾮常完整 本⾝提供了 runserver,为什么不能⽤来部署?runserver ⽅法是调试 Django 时经常⽤到的运⾏⽅式,它使⽤ Django ⾃带的WSGI Server 运⾏,主要在测试和开发中使⽤,并且runserver 开启的⽅式也是单进程 。性能较差。runserver 是作为开发时候⽤的,不适合⽤于⽣产环节1 静态⽂件: runserver 服务器当 debug=True 的时候 才会开启静态⽂件服务器。2 性能: runserver 应该是单线程的。性能差,如果出现错误挂掉。那么整个进程都挂掉了。⽤ Nginx apache 的话 应该是只有⾹港的进程才会挂掉 uWSGI 是⼀个 Web 服务器,它实现了 WSGI 协议、uwsgi、http 等协议。注意 uwsgi 是⼀种通信协议,⽽ uWSGI 是实现 uwsgi 协议和 WSGI 协议的 Web 服务器。uWSGI 具有超快的性能、低内存占⽤和多 app 管理等优点,并且搭配着 Nginx就是⼀个⽣产环境了,能够将⽤户访问请求与应⽤ app 隔离开,实现真正的部署 。相⽐来讲,⽀持的并发量更⾼,⽅便管理多进程,发挥多核的优势,提升性能。django web框架(即应⽤服务器)nginx web服务器8. Django 、Flask、Tornado的对⽐#⾛的是⼤⽽全的⽅向,开发效率⾼。它的MTV框架,⾃带的ORM,admin后台管理,⾃带的sqlite数据库和开发测试⽤的服务器,给开发者提⾼了超⾼的开发效率#是轻量级的框架,⾃由,灵活,可扩展性很强,核⼼基于Werkzeug WSGI⼯具和jinja2模板引擎#o⾛的是少⽽精的⽅向,性能优越。它最出名的是异步⾮阻塞的设计⽅式#Tornado的两⼤核⼼模块:# em:对⾮阻塞式的socket进⾏简单的封装 :对I/O多路复⽤的封装,它实现了⼀个单例9. 什么是wsgi,uwsgi,uWSGI?#WSGI:# web服务器⽹关接⼝,是⼀套协议。介于web服务器和应⽤服务器之间。⽤于接收⽤户请求并将请求进⾏初次封装,然后将请求交给web框架# 实现wsgi协议的模块:# f,本质上就是编写⼀个socket服务端,⽤于接收⽤户请求(django)# ug,本质上就是编写⼀个socket服务端,⽤于接收⽤户请求(flask)#uwsgi:# 与WSGI⼀样是⼀种通信协议,它是uWSGI服务器的独占协议,⽤于定义传输信息的类型#uWSGI:# 是⼀个web服务器,实现了WSGI协议,uWSGI协议,http协议10. django请求的⽣命周期?#,请求封装后交给web框架 (Flask、Django)

#2.中间件,对请求进⾏校验或在请求对象中添加其他相关数据,例如:csrf、n -#3.路由匹配 根据浏览器发送的不同url去匹配不同的视图函数

#4.视图函数,在视图函数中进⾏业务逻辑的处理,可能涉及到:orm、templates => 渲染 -#5.中间件,对响应的数据进⾏处理。#,将响应的内容发送给浏览器。11、简述MVC和MTV#MVC软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)#Model:负责业务对象与数据库的映射(ORM)#View:负责与⽤户的交互#Control:接受⽤户的输⼊调⽤模型和视图完成⽤户的请求#Django框架的MTV设计模式借鉴了MVC框架的思想,三部分为:Model、Template和View#Model(模型):负责业务对象与数据库的对象(ORM)#Template(模版):负责如何把页⾯展⽰给⽤户#View(视图):负责业务逻辑,并在适当的时候调⽤Model和Template#此外,Django还有⼀个urls分发器,#它将⼀个个URL的页⾯请求分发给不同的view处理,view再调⽤相应的Model和Template12、列举django的内置组件?#是对model中对应的数据表进⾏增删改查提供的组件#组件:负责操作数据库#组件:1.⽣成HTML代码2.数据有效性校验3校验信息返回并展⽰#orm组件即⽤于数据库操作,也可⽤于⽤户请求的验证13. Django重定向是如何实现的?⽤的什么状态码?14、django中csrf的实现机制#第⼀步:django第⼀次响应来⾃某个客户端的请求时,后端随机产⽣⼀个token值,把这个token保存在SESSION状态中;同时,后端把这个token放到cookie中交给前端页⾯;#第⼆步:下次前端需要发起请求(⽐如发帖)的时候把这个token值加⼊到请求数据或者头信息中,⼀起传给后端;Cookies:{csrftoken:xxxxx}#第三步:后端校验前端请求带过来的token和SESSION⾥的token是否⼀致;18. cookie和session的区别:#:# cookie是保存在浏览器端的键值对,可以⽤来做⽤户认证#n:# 将⽤户的会话信息保存在服务端,key值是随机产⽣的⾃符串,value值时session的内容# 依赖于cookie将每个⽤户的随机字符串保存到⽤户浏览器上#Django中session默认保存在数据库中:django_session表#flask,session默认将加密的数据写在⽤户的cookie中19. 列举django orm 中所有的⽅法(QuerySet对象的所有⽅法)#<1> all(): 查询所有结果#<2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象。获取不到返回None#<3> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有⼀个。获取不到会抱胸#如果符合筛选条件的对象超过⼀个或者没有都会抛出错误。#<4> exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象#<5> order_by(*field): 对查询结果排序#<6> reverse(): 对查询结果反向排序#<8> count(): 返回数据库中匹配查询(QuerySet)的对象数量。#<9> first(): 返回第⼀条记录#<10> last(): 返回最后⼀条记录#<11> exists(): 如果QuerySet包含数据,就返回True,否则返回False#<12> values(*field): 返回⼀个ValueQuerySet——⼀个特殊的QuerySet,运⾏后得到的并不是⼀系 model的实例化对象,⽽是⼀个可迭代的字典序列#<13> values_list(*field): 它与values()⾮常相似,它返回的是⼀个元组序列,values返回的是⼀个字典序列#<14> distinct(): 从返回结果中剔除重复纪录

发布者:admin,转转请注明出处:http://www.yc00.com/web/1689826067a288990.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信