Django

简述python三大主流web框架

"""
django
大而全,类似于航空母舰
但是有时候过于笨重
flask
小而精,类似于游骑兵(单行代码就可以起一个flask服务)
第三方组件很多,但是有时候也会受限于第三方
tornado
异步非阻塞
速度非常快 SANIC
FASTAPI
...
"""

WSGI,ASGI跟wsgiref和uwsgi是什么关系

WSGI、ASGI是协议,ASGI基于WSGI
wsgiref和uwsgi是实现该协议的功能模块

简述无名有名分组

将匹配到的内容按位置参数传递到视图函数中
将匹配到的内容按关键字参数传到到试图函数中

简述反向解析以及名称空间

反向解析(本质)就是指通过一些方法,得到一个结果,该结果可以访问到对应的url并触发视图函数的运行
名称空间就是解决多个app下出现相同的别名,反向解析不会自动识别应用的前缀 反向解析的应用场景,是因为在软件开发初期,url地址的路径设计可能并不完美,后期需要进行调整,如果项目中很多地方使用了该路径,一旦该路径发生变化,就意味着所有使用该路径的地方都需要进行修改,这是一个非常繁琐的操作。
别名不能出现冲突!!!
# 别名如果发生冲突,未声明命名空间时,不同app下如果有相同的路由别名,反向解析会解析到最下面的app,会发生覆盖

MTV与MVC模型

# MTV:Django号称是MTV模型,其实是借鉴了MVC设计模式
Model:数据存储层,处理所有数据相关的业务,和数据库进行交互,并提供数据的增删改查;
Template:模板层(也叫表现层)具体来处理页面的显示;
View:业务逻辑层,处理具体的业务逻辑,它的作用是连通Model 层和 Template 。
# MVC:其实django本质也是MVC
Modle 代表数据存储层,是对数据表的定义和数据的增删改查;
View 代表视图层,是系统前端显示部分,它负责显示什么和如何进行显示;
Controller 代表控制层,负责根据从 View 层输入的指令来检索 Model 层的数据,并在该层编写代码产生结果并输出。 MTV 是 MVC 的一种细化,将原来 MVC 中的 V 层拿出来进行分离,视图的显示与如何显示交给 Template 层,而 View 层更专注于实现业务逻辑。
其实在 Django 是有 Controller 层的,只不过它由框架本身来实现,所以我们不用关心它。Django 更关注于M、T 和 V。 # vue框架:MVVM模型

FBV和CBV的区别

FBV与CBV在路由匹配上本质是一样的,都是路由对应函数的内存地址
CBV特点:能够直接根据请求方式的不同自动匹配到对应的方法执行

简述CBV流程

特点:能够根据请求方式的不同自动匹配触发对应的方法执行
CBV本质上也是FBV
自定义类调用并执行View中的as_view方法,View类中维护了一个列表,列表中存有8中请求方式,
as_view函数返回一个view函数,view函数返回一个dispatch函数,
dispatch函数中将传入的请求方式变小写,通过反射去列表中查找是否有对应的请求方式,
有的话往后执行,没有就返回信息-不允许该请求方式

数据库查询优化

# only与defer
# select_related与prefetch_related """
**queryset才有惰性查询**
orm语句的特点:
惰性查询
如果你仅仅只是书写了orm语句 在后面根本没有用到该语句所查询出来的结果
那么orm会自动识别 直接不执行
"""
# only与defer
"""
only
结果是一个列表套多个对象,这些对象默认只有only括号内的属性
但是也可以点击括号内没有的属性,点击括号内没有的属性需要额外的走数据库操作
defer
跟only刚好相反
对象里面唯独没有括号内指定的属性
""" # select_related与prefetch_related
"""
select_related内部的本质是联表操作 inner join
括号内只能放外键字段并且多对多不行
括号内可以放多个外键字段
select_related(外键字段1__外键字段2__外键字段3__...)
将联表之后的结果全部查询出来封装到对象里面
之后对象在点击表的字段的时候都无需再走数据库 prefetch_related内部本质是子查询
内部通过子查询的方式将多张的表数据也封装到对象中
这样用户在使用的时候也是感觉不出来的 select_related主要用于一对一,一对多。prefetch_related主要用于多对多,也可用于一对多
上述两种方式,在不同的场景下效率各有千秋
"""

Restful规范

https://www.cnblogs.com/hkwJsxl/p/16581564.html

Web服务器和Web应用程序的区别

Web应用程序主要是完成web应用的业务逻辑的处理,Web服务器则主要是应对外部请求的接收、响应和转发。
需要使用web服务器启动运行,web应用程序才能被用户访问到。
而django框架中,我们之所以只有一个web应用程序就跑起来了,是因为我们在终端执行了一个命令,
python manage.py runserver。这个命令启动了django框架中内置提供的测试web服务器。

请描述一个客户端请求从发起到返回的过程(用django来描述);

用户从浏览器发起一个请求,请求来了之后到wsgi解析封装数据,
然后<请求拦截中间件>(process_request),
接着通过url路由匹配,分发到视图,
有render的走中间件的process_view,
需要连接数据库的连接数据库,不需要连接数据库的<响应拦截中间件>(process_response),
最后wsgi打包数据直接响应给浏览器。

请问Django projectDjango app之间有什么区别和联系?

一个django项目可以有多个app,每个app处理不同的业务逻辑

请详细说明Django中间件处理请求的流程(各个处理函数的执行顺序)

django中间件中一共有五个方法:
process_request
process_response
process_view
process_exception
process_template_response
主要常用为前两个,当用户发起请求时,会从上到下依次经过每一个中间件,这个时候会触发process_request函数,如果函数返回None,则继续到view视图中,返回HttpResponse响应对象则直接从当前中间件的process_reponse函数返回,正常情况下,视图层处理完后,返回执行中间件process_response函数,最后返回给浏览器
process_view在process_request和process_response之间执行
process_exception在出错时执行
process_template_response在视图层中返回的对象有render方法时执行

请问django中如何进行路由分发操作?

在应用下创建一个urls.py,将关于该应用的逻辑处理放到url里面,然后在总路由下导入该应用的urls

get和filter操作出的结果集是什么数据类型, 有什么区别?

get取到的是模型类对象
filter取到的queryset集合 queryset集合可以包含多个模型类对象

create和save方法有什么区别?

save方法要分为两步,save才是最后操作数据库的语句
create直接操作数据库,一步到位

最新文章

  1. redis(一) 安装以及基本数据类型操作
  2. yield return 和 yield break
  3. netstat 查看TCP状态值
  4. JS禁止右键
  5. ClassLoader和Reflect
  6. python 安装 ez_setup.py出现的问题及解决办法
  7. 杭电oj1236 排名
  8. God 1.1.1 多线程之内存可见性
  9. .net 通用面试题
  10. mongodb 高级操作
  11. ZXing 生成、读取二维码(带logo)
  12. [转帖]Sqlcmd使用详解
  13. Shell 编程中,在循环里使用ssh免密远程执行命令的注意事项
  14. Go Web:处理请求
  15. download 属性
  16. Angular CLI 安装和使用以及安装失败的解决方法
  17. crontab运行shell失败解决办法
  18. iOS9下UICollectionViewCell的awakeFromNib问题
  19. linux——(7)了解shell
  20. PHP-Java-Bridge使用笔记

热门文章

  1. WPF绘制圆形调色盘
  2. VM运行centos网络配置(出现错误)详解
  3. mysql工具的使用、增删改查
  4. CVPR2022 Oral OGM-GE阅读笔记
  5. Hadoop生态系统—数据仓库Hive的安装
  6. 怎么在线预览.doc,.docx,.ofd,.pdf,.wps,.cad文件以及Office文档的在线解析方式。
  7. uoj131【NOI2015】品酒大会
  8. SpringBoot 过滤器和拦截器
  9. 利用nginx自带的反向代理以及轮询功能实现应用的负载均衡
  10. &lt;五&gt;关于类的各类成员