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

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排除满足条件的。

相关推荐
cyt涛1 小时前
MyBatis 学习总结
数据库·sql·学习·mysql·mybatis·jdbc·lombok
Rookie也要加油2 小时前
01_SQLite
数据库·sqlite
liuxin334455662 小时前
教育技术革新:SpringBoot在线教育系统开发
数据库·spring boot·后端
看山还是山,看水还是。3 小时前
MySQL 管理
数据库·笔记·mysql·adb
fishmemory7sec3 小时前
Koa2项目实战2(路由管理、项目结构优化)
数据库·mongodb·koa
momo小菜pa3 小时前
【MySQL 09】表的内外连接
数据库·mysql
Jasonakeke3 小时前
【重学 MySQL】四十九、阿里 MySQL 命名规范及 MySQL8 DDL 的原子化
数据库·mysql
程序猿小D3 小时前
第二百六十九节 JPA教程 - JPA查询OrderBy两个属性示例
java·开发语言·数据库·windows·jpa
小宇成长录3 小时前
Mysql:数据库和表增删查改基本语句
数据库·mysql·数据库备份
团儿.4 小时前
解锁MySQL高可用新境界:深入探索MHA架构的无限魅力与实战部署
数据库·mysql·架构·mysql之mha架构