首页 > 编程语言 >Python后端开发(主Django)面试题

Python后端开发(主Django)面试题

时间:2022-11-29 18:32:32浏览次数:84  
标签:web 面试题 请求 Python 中间件 django Django page


最近两个后端同事离职了,帮忙面试了些后端开发的实习生,虽然有过一些后端经验,但我不是主要写后端的,复习了下Django也稍微准备了一些主要是Django相关的面试题,数据库相关部分额外,没有在此举出,但是绝不可忽视。绝非专业,聊以记录,温故知新。


1 什么是wsgi,uwsgi, uWSGI?(简单,可跳过直接问扩展问题)(考察Django处理网络请求流程/生命周期)

wsgi协议:一种实现python解析的通用接口标准/协议,是一种通用的接口标准或者接口协议,实现了python web程序与服务器之间交互的通用性。 利用它,web.py或bottle或者django等等的python web开发框架,就可以轻松地部署在不同的web server上了;

uWSGI 是一个全功能的 HTTP 服务器,他要做的就是把 HTTP 协议转化成语言支持的网络协议。比如把 HTTP 协议转化成 WSGI 协议,让 Python 可以直接使用;

uwsgi 是一种 uWSGI 的内部协议,使用二进制方式和其他应用程序进行通信;

流程关系:

Python后端开发(主Django)面试题_中间件

扩展问题1:既然 uWSGI 可以完成 Nginx 功能,那为什么又要用 Nginx

Nginx 更牛逼,能直接在 Nginx 层面就完成很多事情,比如静态文件、反向代理、转发等需求。

扩展问题2:nginx的作用:

1.反向代理,可以拦截一些web,保护后端的web服务器
2.负载均衡,根据轮询算法,分配请求到多节点web服务器
3.缓存静态资源,加快访问速度,释放web服务器的内存占用,专项专用

扩展问题3 django请求的生命周期(请求流程)?

(可从上面的wsgi开始说起)

1.wsgi,请求封装后交给web框架 (Flask / Django)

2.中间件,对请求进行校验或在请求对象中添加其他相关数据,例如:csrf、request.session

3.路由匹配 根据浏览器发送的不同url去匹配不同的视图函数

4.视图函数,在视图函数中进行业务逻辑的处理,可能涉及到:orm、templates => 渲染

5.中间件,对响应的数据进行处理。

6.wsgi,将响应的内容发送给浏览器。

Python后端开发(主Django)面试题_django_02

请求过程简单说明:浏览器发起请求–>请求处理–>请求经过中间件–>路由映射–>视图处理业务逻辑–>响应请求(template或response)

2 列举Django常用的内置组件(考察Django常用组件熟悉度)

1. ORM

数据模型与数据库的解耦

  • 根据对象的类型生成表结构
  • 将对象,列表的操作,转换为sql语句
  • 将sql查询到的结果转换为对象,列表

2. 分页器(paginator)

from django.core.paginator import Paginator

Paginator对象: paginator = Paginator(user_list, 10)
# per_page: 每页显示条目数量
# count: 数据总个数
# num_pages:总页数
# page_range:总页数的索引范围,如: (1,10),(1,200)
# page: page对象
page对象:page=paginator.page(1)
# has_next 是否有下一页
# next_page_number 下一页页码
# has_previous 是否有上一页
# previous_page_number 上一页页码
# object_list 分页之后的数据列表
# number 当前页
# paginator paginator对象

3. 中间件 (可从Django的生命周期的第二个周期引申出此问题)

介于request(请求)与response(响应)处理之间的一道处理过程,相对比较轻量级,位于web服务端与url路由层之间

MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware', #一些安全设置,比如xss脚本过滤
'django.contrib.sessions.middleware.SessionMiddleware',#session支持中间件,加入这个中间件,会在数据库中生成一个django_session的表。
'django.middleware.common.CommonMiddleware', #通用中间件,会处理一些url
'django.middleware.csrf.CsrfViewMiddleware', #跨域请求伪造中间件,加入这个中间件,在提交表单的时候会必须加入csrf_token,cookie中也会生成一个名叫csrftoken的值,也会在header中加入一个HTTP_X_CSRFTOKEN的值来放置CSRF击。
'django.contrib.auth.middleware.AuthenticationMiddleware', #用户授权中间件。他会在每个HttpRequest对象到达view之前添加当前登录用户的user属性,也就是你可以在view中通过request访问user。
'django.contrib.messages.middleware.MessageMiddleware',#消息中间件。展示一些后台信息给前端页面。如果需要用到消息,还需要在INSTALLED_APPS中添加django.contrib.message才能有效。如果不需要,可以把这两个都删除。
'django.middleware.clickjacking.XFrameOptionsMiddleware',#防止通过浏览器页面跨Frame出现clickjacking(欺骗点击)出现。
'A_orm.middlewares.auth.AuthenticationMiddleware',
]

内置中间件

Python后端开发(主Django)面试题_python_03

4. form组件(一般写HTML前端用的多,考察全栈能力)

主要功能如下:

  • 生成页面可用的HTML标签
  • 对用户提交的数据进行校验
  • 保留上次输入内容

5. ModelForm

作用:

  1. 手动对单表进行增,删,改,查,手动把orm操作获取的数据渲染到模块;(阶段1)
  2. Form组件(类),自动生成标签(input,select),并对用户输入的数据做规则验证;(阶段2)
  3. ModelForm顾名思义就Form和Django的Model数据库模型结合体,可以简单,方便地对数据库进行增加,编辑操作和验证标签的生成

原生用的可能不多,主用DRF框架

6.cookie和session

cookies是浏览器为web服务器存储的一个信息,每次浏览器从某个服务器请求页面时,都会自动带上以前收到的cookie.cookie保存在客户端,安全性较差,注意不要保存没敢信息.

6.1 jsonwebtoken(JWT)(由sesssion/cookie引出来)

考察:原理、数据结构、使用方式、特点…

简述
JWT(Json Web Token)是是目前最流行的跨域认证解决方案,是实现token技术的一种解决方案,JWT由三部分组成: header(头)、payload(载体)、signature(签名)。

使用方法
客户端收到服务器返回的 JWT,可以储存在 Cookie 里面,也可以储存在 localStorage。

此后,客户端每次与服务器通信,都要带上这个 JWT。你可以把它放在 Cookie 里面自动发送,但是这样不能跨域,所以更好的做法是放在 HTTP 请求的头信息Authorization字段里面。

另一种做法是,跨域的时候,JWT 就放在 POST 请求的数据体里面。

​参考:http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html​

3 celery(考察后台的定时任务/异步任务)

分布式任务队列,用于实现异步任务处理。



4 Q查询/F查询

4.1引申问题1:关联查询

4.2引申问题2:原始SQL语句

4.3引申问题3:Django中如何配置过多个数据库

主要考察一些数据库sql相关知识。



5ModeviewSet(考察DRF相关)

5.1 drf继承过哪些视图类,他们之间的区别?

第一种:APIView
第一种遵循了CBV的模式,里面的功能比较多但是需要自己写的代码也有很多
提供了免除csrf认证,版本处理、认证、权限、节流、解析器、筛选器、分页、序列化、渲染器


第二种:ListAPIView,RetrieveAPIView,CreateAPIView,UpdateAPIView,DestroyAPIView
第二种则在第一种的基础上,封装了许多我们需要自己的写的代码,许多功能的实现只需要给专属的变量名赋值就可以实现该功能


第三种:GenericViewSet、ListModelMixin,RetrieveModelMixin,CreateModelMixin,UpdateModelMixin,DestroyModelMixin
第三种则重构了APIView中的as_view()方法,结合请求方法和不同Mixin类的方法名从而进行执行不同的功能。与前面两种最主要的区别是url路由中as_view()方法中需要传值。
目前使用的主要目的是把第二种的bug(查询全部数据的功能和查询单个数据的功能无法在一个类中实现)实现在一个类中!

5.2 GenericAPIView视图类的作用(DRF增删查改视图类)

总结:GenericAPIView主要为drf内部帮助我们提供增删改查的类LIstAPIView、CreateAPIView、UpdateAPIView、提供了执行流程和功能,
我们在使用drf内置类做增删改查时,就可以通过自定义 静态字段(类变量)或重写方法(get_queryset、get_serializer_class)来进行更高级的定制。



6 列举常用的Django第三方库?



7 加密模式有哪些?(举例,大致介绍如对称非对称)



8 是否关注新技术啊?golang,rust,numpy,pandas是否了解?



9 django安全防护?(比如csrf)



10常见的设计模式

单例模式、策略模式、代理模式、观察者模式、装饰模式、适配器模式、命令模式、组合模式、简单工厂模式、模板方法模式(简单概述)


标签:web,面试题,请求,Python,中间件,django,Django,page
From: https://blog.51cto.com/u_12853553/5896535

相关文章

  • Python调用百度地图api获取起点终点距离和预估时长
    去百度地图开放平台申请API的AKhttps://lbsyun.baidu.com/apiconsole/center#/homeimportpandasaspdimportrequests,jsonAK="xxxx"#获取位置defgetPos......
  • Django-6.第三方-笔记
    第三方本次课程中主要介绍一些常用的第三方Django模块,包括:富文本编辑器全文检索发送邮件celery布署当项目开发完成后,需要将代码放到服务器上,这个过程称为布署,服务器上需要有......
  • Django-6.1富文本编辑器-笔记
    富文本编辑器借助富文本编辑器,网站的编辑人员能够像使用offfice一样编写出漂亮的、所见即所得的页面。此处以tinymce为例,其它富文本编辑器的使用也是类似的。在虚拟环境中安......
  • Django-6.2全文检索-笔记
    全文检索全文检索不同于特定字段的模糊查询,使用全文检索的效率更高,并且能够对于中文进行分词处理。haystack:全文检索的框架,支持whoosh、solr、Xapian、Elasticsearc四种全文......
  • Django-6.3-笔记
    发送邮件Django中内置了邮件发送功能,被定义在django.core.mail模块中。发送邮件需要使用SMTP服务器,常用的免费服务器有:​​163​​​、​​126​​​、​​QQ​​,下面以163......
  • python爬取m3u8视频文件
    importrequestsimportosimportaiohttpimportasynciofirst_m3u8_url="https://cdn.zoubuting.com/20221129/waHIjBSS/index.m3u8"headers={'User-Agent......
  • python性能调优之key-query
    近期接触到一个性能调优的问题,需要在mongodb中比对大约100G的csv文件的key在mongodb中是否存在baseline首先做一个什么优化都没有的情况下的基准测试:bat......
  • python-比较两个列表中的相同元素和不同元素
    由于两个列表(List)中可能会存在重复的元素,所以我们可以将列表转化成集合(set)进行去重,然后计算交集和差集。A=['1','2','3']B=['2','4','5']##计算交集print(str(......
  • PYTHON 控制语句
    1.1if语句1.1.1if结构if条件: 代码块如果条件成立(True),则执行代码块。score=100ifscore>=90:print("优秀")1.1.2if-else结构if条件:代码......
  • 力扣240(java&python)-搜索二维矩阵 II(中等)
    题目:编写一个高效的算法来搜索 m x n 矩阵matrix中的一个目标值target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例......