面试八股文-Web相关

Web相关

什么是WSGI?

全称是Web Server Gateway Interface,即web服务器网关接口,

是python定义的Web服务器和Web应用程序之间的一种通信规范

Django,Flask,Tornado的对比

Django: 大而全,内置ORM,Admin等组件,第三方插件较多

Flask: 微框架,比较灵活,但这也导致项目结构不统一

Tornado: 异步支持的微框架和异步网络库,第三方插件少,要自己造轮子

什么是MVC?

模型(Model): 负责业务对象和数据库的交互,在web框架中一般通过ORM实现

视图(View): 负责与用户的交互展示

控制器(Controller): 接收请求参数调用模型和视图,响应请求

什么是ORM?

Object Relational Mapping对象关系映射,用于实现类与数据表,类属性与数据表字段的映射关系

通过面向对象的方式操作数据表,代码量更少,提高了开发效率

在python中,常用的ORM框架有

  • Django的ORM: 简单易用,但不好处理复杂的查询
  • peewee: 类似于Django的ORM的轻量级实现,容易与任意web框架集成, 官方文档很清晰
  • SQLAlchemy: 重量级API,可以写复杂查询,学习曲线长, 事务处理很玄学

SQL注入

概念: 通过构造特殊的输入参数传入后端,导致后端查询出数据库的全部记录,导致数据泄漏

实现原理:

sql = "select * from students where name='%s';" % "小明' or 1 or '"
print(sql)          # select * from students where name='小明' or 1 or '';

如何防范:

  • 不要直接拼接SQL,SQL语句用%s占位,通过cursor.execute()的第二个参数位传入参数
  • 使用ORM可以大大降低sql注入的风险
  • 数据库不要明文存储敏感信息

XSS攻击

概念: Cross Site Scipting跨站脚本攻击,攻击者通过某种手段在web页面插入一些恶意的js代码,当该页面加载时,这段js脚本就会执行,用 document.cookie 来读写 Cookie 数据,从而窃取到用户的cookie等信息,XSS攻击主要 分为 反射型 和 存储型 两种

实现原理:

  • 反射型XSS攻击原理: 攻击者诱导用户点击包含了恶意js代码的url链接,网站服务端又将这个恶意脚本反射给浏览器执行

    • 如恶意url链接:

      192.168.3.67:9000/?name=<script>alert("hello")</script>
      
  • 存储型XSS攻击原理: 攻击者将恶意代码上传到服务器,只要用户浏览包含此恶意代码的网站就会执行恶意代码

    • 如submit表单时,提交的评论信息为下面这种,其它用户访问评论信息页就会弹框提示hi

      <script>alert("hi")</script>
      

如何防范:

将不可信数据放入到html标签内(比如div、span等)的时候需要进行html编码,将 & < > " ’ / 转义为实体字符

CSRF攻击

概念: Cross Site Request Forgery跨站请求伪造,攻击者盗用用户身份发送恶意请求

实现原理: 用户在登录网站A后产生了cookie,又去访问了恶意网站B,网站B发出访问网站A的请求,于是浏览器带着网站A的cookie访问A,这样B就达到了模拟用户操作访问网站A的目的

如何防范:

服务端生成一个csrf_token,嵌入到网站A页面中,攻击者模拟向服务端发送post请求时,由于没有正确的csrf_token,服务器会拒绝该请求. 现在浏览器已经禁止发送跨域请求了

同源策略

一个URL由协议,域名,端口,路径组成,如果两个URL的协议,域名,端口都相同,就可以认为这两个URL是同源的

同源策略是浏览器的一个安全机制,不同源的js脚本在没有明确授权的情况下,不能读写其它网站的资源

CORS跨域请求

出于安全原因,浏览器限制跨域 HTTP 请求。为了安全的请求跨域资源,浏览器使用一种称为 CORS(跨域资源共享) 的机制。

前端发出跨域请求后,浏览器会自动向HTTP header添加一个额外的Origin字段,填入发起跨域请求的URL,

后端如果允许跨域请求,也要在响应头里添加Access-Control-Allow-Origin字段,填入允许发起跨域请求的URL

浏览器收到响应后,判断 发起跨域请求的URL 是否被允许,如果允许,前端才能接收到跨域资源

Django是如何防止CSRF攻击的?

添加CSRF中间件, 要求在发送post请求的时候必须要带上一个csrf_token, 而这个csrf_token是在第一次获取页面时嵌入到form中的

什么是前后端分离? 有哪些优点?

前端通过访问后端提供的接口对数据进行CRUD, 后端只返回前端所需的数据, 不再对html模板文件进行渲染

优点:

  • 网页,app这些不同的前端可以共用接口,减少开发量
  • 定义好接口规范后,前后端可以同步开发,各司其职

什么是RestfulAPI?

  • 把HTTP请求方法与数据库的增删改查结合起来
    • HTTP的GET查询资源,POST新增资源,PUT修改资源,DELETE删除资源,
  • 请求路径中不能出现动词,使用名词的复数形式
  • 使用JSON返回数据

序列化 和 反序列化

序列化:数据对象 转 json

反序列化:json 转 数据对象

read_only 和 write_only

read_only仅用于序列化输出, 不校验参数

write_only正好相反

View,APIView,GenericAPIView

  • View:Django的视图类,所有视图的基类,传入的是HTTPRequest
  • APIView:DRF中所有视图的基类,传入的是Request
  • GenericAPIView:继承自APIView,增加了query_set,serializer_class等类属性和方法,通常搭配Mixin扩展类使用
    • CreateAPIView:继承自 GenericAPIView、CreateModelMixin
    • ListAPIView:继承自GenericAPIView、ListModelMixin
    • RetrieveUpdateDestoryAPIView:继承自GenericAPIView、RetrieveModelMixin、UpdateModelMixin、DestoryModelMixin

Viewset,GenericViewset,ModelViewset

  • Viewset:继承自APIView,可以把请求方法映射为自定义方法名
  • GenericViewset:继承自GenericAPIView,增加了query_set…
  • ModelViewset:继承自GenericAPIView和所有的Mixin扩展类

注册的流程

接收参数,用户名,密码,手机号,短信验证码, 正则表达式校验参数

调用User.objects.create_user()方法,调用login()实现状态保持

生成响应对象,设置cookie,返回响应

登录的流程

接收参数,用户名,密码,是否记住密码,正则表达式校验参数

调用authenticate()方法,调用login()实现状态保持

生成响应对象,设置cookie,返回响应

nginx, uWSGI, Django有什么关系

nginx和uWSGI都是web服务器, nginx处理静态资源, uWSGI处理动态资源

请求会先发到nginx, 发现是自己处理不了的动态资源就转发给uWSGI,

Django是web应用程序, 需要运行在uWSGI服务器上

Django的优缺点

  • python实现, 代码简洁优雅
  • 提供管理后台, 能够快速开发
  • 复用度高, 设计上遵循DRY原则
  • 内置的中间件和安全框架
  • 单体应用, 不适合并行开发
  • 不适合高并发的互联网项目

ERP odoo

ERP是企业资源计划, 企业内部的业务管理系统, 包含财务、物流、人力资源等核心模块

odoo是python开发的开源ERP系统

Celery的原理

基于生产者消费者模型, 生产者就是web应用程序, 负责把需要异步执行的任务放到消息队列中,

一般可以用Redis, RabbitMQ作为消息队列

消费者就是celery, 负责读取消息队列的内容来执行

ElasticSearch的原理

本质上是对海量数据进行分词, 并建立倒排索引, 这样就可以通过关键字搜出满足条件的所有记录

数据对象

read_only 和 write_only

read_only仅用于序列化输出, 不校验参数

write_only正好相反

View,APIView,GenericAPIView

  • View:Django的视图类,所有视图的基类,传入的是HTTPRequest
  • APIView:DRF中所有视图的基类,传入的是Request
  • GenericAPIView:继承自APIView,增加了query_set,serializer_class等类属性和方法,通常搭配Mixin扩展类使用
    • CreateAPIView:继承自 GenericAPIView、CreateModelMixin
    • ListAPIView:继承自GenericAPIView、ListModelMixin
    • RetrieveUpdateDestoryAPIView:继承自GenericAPIView、RetrieveModelMixin、UpdateModelMixin、DestoryModelMixin

Viewset,GenericViewset,ModelViewset

  • Viewset:继承自APIView,可以把请求方法映射为自定义方法名
  • GenericViewset:继承自GenericAPIView,增加了query_set…
  • ModelViewset:继承自GenericAPIView和所有的Mixin扩展类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值