网络数据库后端框架相关面试题(其四)

31, 在视图函数中,常见的装饰器有哪些?

django.views.decorators.csrf_exempt: 绕过csrf保护

django.views.decorators.http.require_GET: 限定请求方式为get请求

django.views.decorators.http.require_POST: 限定请求方式为post请求

django.views.decorators.http.require_http_methods: 设置限定的请求方式

django.views.decorators.cache.cache: 设置请求

django.util.decorators.method_decorator: 在CBV中类函数中使用装饰器

django.db.transaction.atomic: 保证视图函数事务完整性

32,wsgi和uwsgi的区别

wsgi全名(Python Web service Getway interface)是为python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。也可以认为WSGI是一种通信协议。

uWSGI 是一个服务器,它实现了WSGI协议, uWSGI,HTTP等协议。nginx中HttpUwsgiModule 的作用是与uWSGI服务器进行交换。

33,QuerySet 两大特性

惰性执行

创建查询集不会访问数据库,直接调用数据时,才会访问数据库,调用数据的情况包括迭代,序列化与if 合用

缓存

使用同一个查询集,第一次使用时会发生数据库查询,然后Django 会把结果缓存下来,再次使用这个查询集时会使用缓存的数据,减少数据库的查询次数。

34, 简述什么是FBV和CBV

FBV(function base views)就是在视图中使用函数处理请求。

CBV(class base views ) 就是在视图里使用类处理请求

python 是一个面向对象的编程语言,如果只用函数来开发,有很多面向对象的优点就错失了(继承,封装,多态)。所以Django在后来加入Class-Based-View.可以让我们用类写View。这样做的优点主要有以下两种:

1,提高代码的复用性,可以使用面向对象的技术,比如Mixin(多继承)

2,可以使用不同的函数针对不同的HTTP 方法处理,而不是通过很多if判断,提高代码课可读性f

在django中,所有的Queryset 都是惰性的,意思是当创建一个查询集的时候,并没有跟数据库发生任何交互。因此我们可以对查询集进行级联的filter等操作,只有在访问Queryset的内容的时候,django才会真正进行数据库的访问。而多频率,复杂的数据库查询往往是性能问题最大的根源。

不过我们实际开发中,往往需要访问到外键对象的其他属性。如果按照默认的查询方式去遍历取值,那么会造成多次的数据库查询,效率可想而知。

在查询对象集合的时候,把指定的外键对象也一并完整查询加载,避免后续的重复查询

1,select_related 适用于外键和多对一的关系查询

2, prefetch_reated适用于一对多或者多对多的查询

36, session 与 cookie的区别

存储位置:session在服务器中,cookie是在客户端

存储数据大小: session无限制, cookie不同浏览器都会有不同的限制, 大概几KB

安全性:session更安全, cookie在本地容易泄露, 一般需要加密

性能:数据如果全部存在session会造成服务器性能下降,可以选择部分数据使用cookie存到客户端

37, 对django的认识

1, django是走大而全的方向, 它最出名的是其全自动化的管理后台:只需要使用起ORM, 做简单的对象定义,它就能自动生成数据库结构,以及全功能的管理后台。

2, django内置的ORM跟框架内的其他模板耦合程度高。

应用程序必须使用django内置的ORM,否则就不能享受到框架内提供的种种基于其ORM的便利:

理论上可以切换掉其ORM模块,但这就相当于要把装修完毕的房子拆除重新装修,倒不如一开始就去毛坯房做全新的装修。

3,django的卖点就是超高的开发效率,其性能扩展有限;采用django的项目,在流量达到一定规模后,都需要对其进行重构,才能满足性能要求。

4, django适用的是中小型的网站,或者作为大型网站快速实现产品雏形的工具。

5, django模板的设计哲学就是彻底的将代码,样式分离;django从根本上杜绝在模板中进行编码,处理数据的可能。

38, django, flask, tornado的对比

1,django走的是大而全的方向,开发效率高。它的MTV框架,自带ORM,admin后台管理,自带的sqlite数据库和开发测试用的服务器给开发者提高了超高的开发效率。

2, Flask是轻量级的框架,自由,灵活,可扩展性很强,核心基于Werkzeug WSGI 工具和jinja2模板引擎。

3, Tornado走的是少而精的方向,性能优越。它最出名的是异步非阻塞的设计方式

Tornado的两大核心模块:

iostraem:对非阻塞式的socket进行简单的封装

ioloop:对I/O多路复用的封装,它实现了一个单例

39, QuerySet对象的常用方法

all():查询所有结果

filter(**kwargs): 它包含了所给筛选条件相匹配的对象。获取不到返回None

get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个。获取不到会报错。

如果符合筛选条件的对象超过一个或者没有都会抛出错误。

exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象。

order_by(*field): 对查询结果排序

reverse():对查询结果反向排序

count():返回数据库中匹配查询的对象数量

first():返回第一条记录

exists():如果QuerySet包含数据,就返回True,否则返回False

values(*field): 返回一个ValueQuerySet ------一个特使的QuerySet,运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典序列

values_list(*field):它与values()非常相似,它返回的是一个元组序列,value返回的是一个字典序列

disrinct():从返回结果中剔除重复记录

40, filter和exclude的区别

取到的值都是QuerySet对象,filter选择满足条件的,exclude排除满足条件的。

相关推荐
Elastic 中国社区官方博客1 分钟前
Elasticsearch 开放推理 API 增加了对 IBM watsonx.ai Slate 嵌入模型的支持
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
企鹅侠客5 分钟前
ETCD调优
数据库·etcd
Json_1817901448011 分钟前
电商拍立淘按图搜索API接口系列,文档说明参考
前端·数据库
煎饼小狗23 分钟前
Redis五大基本类型——Zset有序集合命令详解(命令用法详解+思维导图详解)
数据库·redis·缓存
永乐春秋39 分钟前
WEB-通用漏洞&SQL注入&CTF&二次&堆叠&DNS带外
数据库·sql
打鱼又晒网1 小时前
【MySQL】数据库精细化讲解:内置函数知识穿透与深度学习解析
数据库·mysql
大白要努力!1 小时前
android 使用SQLiteOpenHelper 如何优化数据库的性能
android·数据库·oracle
tatasix2 小时前
MySQL UPDATE语句执行链路解析
数据库·mysql
南城花随雪。2 小时前
硬盘(HDD)与固态硬盘(SSD)详细解读
数据库
儿时可乖了2 小时前
使用 Java 操作 SQLite 数据库
java·数据库·sqlite