首页 > 其他分享 >flask和Django面试

flask和Django面试

时间:2022-10-11 16:37:16浏览次数:64  
标签:__ flask app ctx Django 面试 session Local

问题一:flask和django的区别:
  对于django来说,内部组件特别多,自身功能强大,有点大而全,而flask,内置组件很少,但是它的第三方组件很多,扩展性强,有点短小精悍,而它们之间也有相似之处,
  因为它们两个框架都没有写socket,都是基于wsgi协议做的,在此之外,flask框架中的上下文管理较为耀眼。

  
  相同点:它们两个框架都没有写socket,都是基于wsgi协议做的
  请求相关数据传递的方式不同:django:通过传递request参数取值
                flask:见问题二
           组件不同:django组件多
                flask组件少,第三方组件丰富

问题1.1: flask上下文管理:
  简单来说,falsk上下文管理可以分为三个阶段:
        1、请求进来时,将请求相关的数据放入上下问管理中
        2、在视图函数中,要去上下文管理中取值
        3、请求响应,要将上下文管理中的数据清除
  
  详细点来说:
        1、请求刚进来,将request,session封装在RequestContext类中,app,g封装在AppContext类中,并通过LocalStack将requestcontext和appcontext放入Local类中
        2、视图函数中,通过localproxy--->偏函数--->localstack--->local取值
        3、请求相应时,先执行save.session()再各自执行pop(),将local中的数据清除
        

问题1.2 flask第三方组件
  flask:
      -flask-session 默认放入cookie,可以放入redis
      -flask-redis
      -flask-migrate
      -flask-script
      -blinker 信号
 公共: DBUtils 数据库连接池
      wtforms 表单验证+生成HTML标签
      sqlalchemy
  自定义:Auth 参考falsk-login

问题二:Flask中的session是什么时候创建,什么时候销毁的?
  当请求进来时,会将requset和session封装为一个RequestContext对象,通过LocalStack将RequestContext放入到Local对象中,因为
请求第一次来session是空值,所以执行open_session,给session(uuid4())赋值,再通过视图函数处理,请求响应时执行save.session,将签名session写入cookie中,再讲Local中的数值pop掉。

问题三:flask中一共有几个LocalStack和Local对象
  两个LocalStack,两个Local
  request、session共同用一个LocalStack和Local
  g、app共同用一个Localstack和Local

问题四: 为什么把请求放到RequestContext中:
   因为request和session都是在视图中操作频繁的数据,也是用户请求需要用的数据,将request和session封装在RequestContext中top,pop一次就可以完成,而单独不封装在一起就会多次操作,

    ctx = RequestContext(request,session)

问题五:local作用
    -保存 请求上下文对象和app上下文对象

     -localstack的源码与threading.local(线程处理)作用相似,不同之处是Local是通过greenlet(协程)获取唯一标识,粒度更细
      
 问题六:Localstack作用
    2、将local对象中的数据维护成一个栈【ctx,ctx】(先进后出)
{
“协程或线程的唯一标识”: { stack:[ctx,ctx,ctx,] }
}
    

为什么维护成一个栈?
   当是web应用时:不管是单线程还是多线程,栈中只有一个数据
   - 服务端单线程:
    {
    111:{stack: [ctx, ]}
    }
  - 服务端多线程:
    {
    111:{stack: [ctx, ]}
    112:{stack: [ctx, ]}
    }
离线脚本:可以在栈中放入多个数据
with app01.app_context():
  print(current_app)
  with app02.app_context():
    print(current_app)
  print(current_app)

 问题七:什么是g?
    g 相当于一次请求的全局变量,当请求进来时将g和current_app封装为一个APPContext类,在通过LocalStack将Appcontext放入Local中,取值时通过偏函数,LocalStack、loca l中取值,响应时将local中的g数据删除:
 问题八:怎么获取Session/g/current_app/request
    通过 、偏函数(lookup_req_object)、Localstack、Local取值
 问题九: 技术点:
  - 反射 (LocalProxy())
  - 面向对象,封装:RequestContext
  - 线程(threading.local)
  - 笔试:自己写一个类+列表 实现栈。(LocalStack)
问题十:python基本哪些内容比较重要:
1、反射
  -CBV
  -django配置文件
  -wtforms中的Form()示例化中 将"_fields中的数据封装到From类中"
2、装饰器 (迭代器,生成器)
  -flask:路由、装饰器

  -认证
  -csrf
3、面向对象
-继承、封装、多态(简单描述)
 -双下划线:
    __mro__ wtform中 FormMeta中继承类的优先级
   dict  
    __new__ ,实例化但是没有给当前对象
     wtforms,字段实例化时返回:不是StringField,而是UnboundField
       rest frawork many=Turn 中的序列化
    __call__
       flask 请求的入口app.run()
     字段生成标签时:字段.str => 字段.call => 插件.call
    
iter 循环对象是,自定义__iter__

        wtforms中BaseForm中循环所有字段时定义了__iter__
    metaclass
        - 作用:用于指定当前类使用哪个类来创建
        - 场景:在类创建之前定制操作
        示例:wtforms中,对字段进行排序。

标签:__,flask,app,ctx,Django,面试,session,Local
From: https://www.cnblogs.com/kb-python/p/16779638.html

相关文章

  • django的配置文件
    django的配置文件每个配置项的作用必须大写才是配置项django项目要启动,要先加载配置文件,如果配置文件报错,项目运行不起来django配置文件settings项目根路径from......
  • django ImportExportModelAdmin 导出的文件中中文乱码解决方案
    @admin.register(BuildFunction)classBuildFunctionAdmin(SimpleHistoryAdmin,ImportExportModelAdmin):form=BuildFunctionFormlist_display=('id','c......
  • 看似简单的一道SQL面试题,你是否能够很快写出答案?
    如果觉得文章写得好,如果你想要博客文章中的数据,请关注公众号:【数据分析与统计学之美】,进群和作者交流!  近期在群里面看到了如下这样一个面试题目,这个题目其实难度不大,但......
  • 没有窗口函数,你能很快做出这道MySQL面试题吗?
      这是另外一个面试题目,相对难说有点难度,由于MySQL8.0以前没有“窗口函数”,当你碰到了这个题目,你是否能够很快写出这个答案来呢?请使用上述数据,完成如下效果:建表语句creat......
  • ××教育Excel数据分析面试题
    如果觉得文章写得好,如果你想要博客文章中的数据,请关注公众号:【数据分析与统计学之美】,进群和作者交流!目录  ​​1、用颜色标记重复值​​​ ​​2、用颜色标记出姓名中......
  • 「Java 数据结构」:手撕单链表的增删改查及大厂面试题。
    目录​​一、单链表的增删改查​​​​1、创建结点     ​​​​2、单链表的添加操作​​​​3、单链表的删除操作​​​​4、单链表的有效结点的个数​​​​二、......
  • 面试技巧之 STAR 法则 All In One
    面试技巧之STAR法则AllInOne简历、面试STARSituation,Task,Action,Result一.什么是STAR法则?TheSTAR(Situation,Task,Action,Result)formatisa......
  • 年底前端面试题总结(上)
    对keep-alive的理解HTTP1.0中默认是在每次请求/应答,客户端和服务器都要新建一个连接,完成之后立即断开连接,这就是短连接。当使用Keep-Alive模式时,Keep-Alive功能使客户端......
  • 【Django-rest-framework框架】 第08回 自定义频率类,分页功能,排序功能,过滤功能
    目录1.自定义频率类2.频率功能源码剖析3.分页功能3.1PageNumberPagination3.2LimitOffsetPagination3.3CursorPagination3.4drf中分页的使用4.排序功能5.过滤功能......
  • Django简介和安装
    目录​​Django​​​​MVC模型​​​​Django的MTV模型​​​​Django的安装​​​​虚拟环境​​DjangoDjango是一个开放源代码的Web应用框架,由Python写成,其网站的特点是......