Py学习  »  Python

面试前赶紧看了5道Python Web面试题,Python面试题No17

梦想橡皮擦 • 4 年前 • 353 次点击  
阅读 16

面试前赶紧看了5道Python Web面试题,Python面试题No17

本面试题题库,由公号:非本科程序员 整理发布

第1题: Flask中的请求上下文和应用上下文是什么?

  • 在Flask中处理请求时,就会产生一个 “请求上下文” 对象,整个请求的处理过程,都会在这个上下文对象中进行。 这保证了请求的处理过程不被干扰。 包含了和请求处理相关的信息,同时Flask还根据werkzeug.local模块中实现的一种数据结构LocalStack用来存储“请求上下文”对象。
  • “应用上下文” 也是一个上下文对象,可以使用with语句构造一个上下文环境,它也实现了push、pop等方法。 “应用上下文” 的构造函数也和 “请求上下文” 类似,都有app、url_adapter等属性。“应用上下文” 存在的一个主要功能就是确定请求所在的应用。

第2题:django中间件的使用?

django在中间件中预设了6个方法,这6个方法区别在于不同的阶段执行,对输入或输出进行干预,方法如下:

#1 初始化: 无需任何参数,服务器响应第一个请求的时候调用一次,用于确定是否启用当前中间件

def __init__():
    pass

#2.处理请求前:在每个请求上调用,返回None或者HttpResponse 对象

def process_response(request):
    pass

#3 处理视图前,在每个请求上调用,返回None 或HttpResopnse对象
def  process_view(request.view_func, view_args, view_kwargs):
    pass

#4 处理模板响应前: 在每个请求上调用,返回实现render 方法的响应对象
def peocess_template_response(request, response):
    pass
#5 处理响应后,多有响应返回浏览器之前被调用,每个请求上调用,返回HttpResponse对象

def process_response(request, response):
    pass

#6  异常处理:当时图抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象
def process_exception(request, execption):
    pass
复制代码

第3题: django开发中数据做过什么优化?

  1. 设计表时,尽量少使用外键,因为外键约束会影响插入和删除性能
  2. 使用缓存,减少对数据库的访问
  3. orm框架下设置表时,能使用varchar确定字段长度时,就别用text
  4. 可以给搜索频率搞得字段属性,在定义时创建索引
  5. django orm 框架下的Querysets 本来就有缓存的
  6. 如果一个页面需要多次链接数据库,最好一次性去除所有需要的数据,减少数据库的查询次数
  7. 若页面只需要数据库里面的某一两个字段时,可以用QuerySet.values()
  8. 在模板标签里使用with标签可以缓存Qset查询结果

第4题: 解释一下 Django 和 Tornado 的关系、差别?

Django

Django源自一个在线新闻 Web站点,于 2005 年以开源的形式被释放出来。

Django 框架的核心组件有:

用于创建模型的对象关系映射为最终用户设计的完美管理界面一流的 URL 设计设计者友好的模板语言缓存系统等等

它鼓励快速开发,并遵循MVC设计。

Django遵守 BSD版权,最新发行版本是Django1.4,于2012年03月23日发布.Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以“插件”形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展性。它还强调快速开发和DRY(Do Not RepeatYourself)原则。

Tornado

Tornado是 FriendFeed使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本。这个 Web 框架看起来有些像 web.py 或者 Google 的 webapp,不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关的有用工具和优化。

Tornado 和现在的主流 Web 服务器框架(包括大多数Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其 非阻塞的方式和对epoll的运用,Tornado 每秒可以处理数以千计的连接,这意味着对于实时 Web服务来说,Tornado 是一个理想的 Web 框架。我们开发这个 Web 服务器的主要目的就是为了处理 FriendFeed 的实时功能 ——在 FriendFeed 的应用里每一个活动用户都会保持着一个服务器连接。(关于如何扩容 服务器,以处理数以千计的客户端的连接的问题。

第5题:什么是restful API ,谈谈你的理解?

  • REST:Representational State Transfer 的缩写,翻译:“具象状态传输”。一般解释为“表现层状态转换”。
  • REST 是设计风格而不是标准。是指客户端和服务器的交互形式。我们需要关注的重点是如何设计
  • REST 风格的网络接口。

REST 的特点

  1. 具象的。一般指表现层,要表现的对象就是资源。比如,客户端访问服务器,获取的数据就是资源。比如文字、图片、音视频等。
  2. 表现:资源的表现形式。txt 格式、html 格式、json 格式、jpg 格式等。浏览器通过URL 确定资源的位置,但是需要在HTTP 请求头中,用Accept 和Content-Type 字段指定,这两个字段是对资源表现的描述。
  3. 状态转换:客户端和服务器交互的过程。在这个过程中,一定会有数据和状态的转化,这种转化叫做状态转换。其中,GET 表示获取资源,POST 表示新建资源,PUT 表示更新资源,DELETE 表示删除资源。HTTP 协议中最常用的就是这四种操作方式。

RESTful 架构

  1. 每个URL 代表一种资源;
  2. 客户端和服务器之间,传递这种资源的某种表现层;
  3. 客户端通过四个http 动词,对服务器资源进行操作,实现表现层状态转换。

第6题:关注题,最近在公号更新一个神奇的系列入门文章

她专科学历 27岁从零开始学习c,c++,python编程语言 29岁编写百例教程 30岁掌握10种编程语言, 用自学的经历告诉你,学编程就找梦想橡皮擦

欢迎关注她的公众号,搜索— 非本科程序员

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/33594
 
353 次点击