面试

django

 
  1. 写出常用的bootstrap的样式。

    引入jquery.js文件
    栅格系统:<div class="col-md-1>1</div>
    表格样式:table
    表单样式:.form-control来修饰
    支持多行文本的文本域:<textarea class="form-control" rows="3"></textarea>
    单选框和多选框
    按钮:button
    图片:img
  2. 什么是响应式布局?

    跟随设备界面大小自动更改内容大小
  3. 请通过jQuery发送ajax请求。

    $.ajax({
    type:请求方式,
    url: 请求地址,
    data:请求参数,
    dataType: 服务器返回值类型,
    success:回调函数
    });
  4. JavaScript与this相关的面试题(4分)

    name = '老男孩';
    
    info = {
     name:'alex',
     age:123,
     func:function(){
         console.log(this.name);
     }
    }
    
    info.func() 
    
    “alex”
    name = '老男孩';
    
    info = {
     name:'alex',
     age:123,
     func:function(){
         console.log(this.name);
            function f1(){
                console.log(this.name);
            }
            f1()
     }
    }
    
    info.func() 
    name = '老男孩';
    
    info = {
     name:'alex',
     age:123,
     func:function(){
         console.log(this.name);
            (function(){
                console.log(this.name);
            })()
     }
    }
    
    info.func()
    
    “alex”
    name = '老男孩';
    
    info = {
     name:'alex',
     age:123,
     func:function(){
         console.log(this.name); 
            var xxx = this;
            (function(){
                console.log(xxx.name); 
            })()
     }
    }
    
    info.func() 
    “老男孩”
  5. 什么是跨域?如何解决?

    指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。
    使用nginx实现跨域原理
  6. 简述你对Http协议的理解?

    htp协议是应用层的一种协议
    HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)
    Http在进行tcp传输前需要进行三次握手进行客户端和服务端的验证
    http请求由三部分组成,分别是:请求行、消息报头、请求正文
    
  7. 简述你对Https协议的理解?

    HTTPS 的目的是将这些内容加密,确保信息传输安全。最后一个字母 S 指的是 SSL/TLS 协议,它位于 HTTP 协议与 TCP/IP 协议中间
  8. 列举常见的http请求头及作用?

    HTTP/1.1协议中共定义了八种方法(也叫“动作”)来以不同方式操作指定的资源: 
    
    1. **GET**:向指定的资源发出显示请求(常用)
    2. **HEAD**:与get方法想同,只不过服务器不传回资源的文本部分
    3. **POST**:向指定资源提交数据,请求服务器进行处理(常用)
    4. **PUT**:向指定资源上传其最新内容
    5. **DELETE**:请求服务器删除Request-URI所标识的资源
    6. **TRACE:** 回收服务器收到的请求,主要用于测试或诊断。 
    7. **OPTIONS:**这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用'*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。
    8. **CONECT:** HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。
  9. 列举常见的https请求方法及作用?

  10. 列举常见的http响应状态码。

    状态代码的第一个数字代表当前响应的类型:
    
    - 1xx消息——请求已被服务器接收,继续处理
    - 2xx成功——请求已成功被服务器接收、理解、并接受
    - 3xx重定向——需要后续操作才能完成这一请求
    - 4xx请求错误——请求含有词法错误或者无法被执行
    - 5xx服务器错误——服务器在处理某个正确请求时发生错误
  11. http中connections:keep-alive的请求头的作用?

    具体的含义是有关http 请求的是否保持长连接,即链接是否复用,每次请求是复用已建立好的请求,还是重新建立一个新的请求。
    使用Keep-Alive模式(又称持久连接、连接重用)时,Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。
  12. django请求生命周期?

    Django的请求生命周期是指:当用户在浏览器上输入url到用户看到网页的这个时间段内,Django后台所发生的事情。
    第一步:浏览器发起请求
    第二步:WSGI创建socket服务端,接收请求(Httprequest)
    第三步:中间件处理请求
    第四步:url路由,根据当前请求的URL找到视图函数
    第五步:view视图,进行业务处理(ORM处理数据,从数据库取到数据返回给view视图;view视图将数据渲染到template模板;将数据返回)
    第六步:中间件处理响应
    第七步:WSGI返回响应(HttpResponse)
    第八步:浏览器渲染
    ————————————————
    版权声明:本文为CSDN博主「Nice07」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/Nice07/article/details/83903841
  13. 什么是wsgi?

    WSGI的全称是Web Server Gateway Interface,翻译过来就是Web服务器网关接口
    WSGI是一个规范,定义了Web服务器如何与Python应用程序进行交互,使得使用Python写的Web应用程序可以和Web服务器对接起来
  14. 什么是MVC ?什么是MTV?

     全名是Model View Controller,是软件工程中的一种软件架构模式 
     M: model 模型 数据库交互
     V:view 视图 展示给用户看的 HTML
     C :controller 控制器 业务逻辑 传递指令
    
     Django的MTV模式
    Model(模型):负责业务对象与数据库的对象(ORM)
    Template(模版):负责如何把页面展示给用户
    View(视图):负责业务逻辑,并在适当的时候调用Model和Template
  15. django中间件作用以及应用场景?

    什么是中间件:就是一个类,在全局范围内处理Django的请求和响应
    中间件是帮助我们在视图函数执行之前和执行之后都可以做一些额外的操作,它本质上就是一个自定义类,类中定义了几个方法,Django框架会在处理请求的特定的时间去执行这些方法。
  16. django中FBV和CBV有什么区别?

    FBV:写过的都是基于函数的view,就叫FBV。
    CBV:基于类的view,就叫做CBV
  17. django orm中如何批量创建数据?

    from django.db import models-导入相应的模块
    创建models类函数,添加字段
    编写url地址
    在views中编写视图函数
  18. django 如何执行原生SQL?

    raw()方法:只能实现查询
    注意:
    1-选择的字段必须包含主键,
    2-通过'app名_表名'找表,
    3-where条件中用户id(user.pk)必须是字符串类型,不能像在终端输入sql语句后立即返回数据,只能通过调用对象属性的方法查看。
    cursor对象: 支持所有操作
  19. django的orm如何查询id不等于5的数据。

    xxx.objects.exclude(id='5')
  20. cookie和session的区别?

    cookie保存在浏览器本地上的一组组键值对: HTTP协议是无状态的,每次请求之间都是相互独立的,之间没有关系,没有办法保存状态。 Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务器提取有用信息。 
    
    session保存在服务器上的一组组键值对,必须依赖Cookie, Cookie弥补了HTTP无状态的不足,让服务器知道来的人是“谁”;但是Cookie以文本的形式保存在本地,自身安全性较差;所以我们就通过Cookie识别不同的用户,对应的在Session里保存私密的信息以及超过4096字节的文本。
        Cookie虽然在一定程度上解决了“保持状态”的需求,但是由于Cookie本身最大支持4096字节,以及Cookie本身保存在客户端,可能被拦截或窃取,因此就需要有一种新的东西,它能支持更多的字节,并且他保存在服务器,有较高的安全性。这就是Session。
  21. django的orm中on_delete的作用?

    级联删除
  22. 描述crm有哪些功能?

    项目主要用于为公司销售人员、运营、售后等人员提供公共的处理平台,在公司发展的过程中以便便实现信息的管理,实现公司的信息化流程。 为销售人员工提供客户关系的管理,对于新客户信息的录入和等级。定期对客户进行回访和跟进,从而增加用户粘性,便便于之后的转化。运营和渠道通过关系以及人脉获取有效客户,可以进行行录入和分配。
  23. crm中什么是公户?什么是私户?为什么要做这个区分?

    公户:指当前用户登陆系统之后看到的所有客户的信息,当前客户并没有被某一销售转化
    私户:指当前销售存放属于自己的客户的账户
    保证数据安全,为了防止销售之间存在“恶意”竞争,避免因为有人进行抢单导致出现冲突
  24. 请列举出CRM系统中的表。

    部门表:Department
    用户表:UserProfile
    客户表:Customer
    校区表:Campuses
    班级表:ClassList
    跟进记录表: ConsultRecord
    报名表:Enrollment
    缴费记录表:PaymentRecord
    课程记录表:CourseRecord
    学习记录表:StudyRecord
  25. 对数据库的数据做展示时,不同字段类型有不同的展示方法,分别是什么?

    普通字段 -- 对象.字段名
    choice字段 -- 对象.get_字段名_display
    外键 -- 对象.外键字段.属性
    多对多 -- 对象.自定义方法
  26. 请详细说说你们公司销售是如何使用CRM的。

    销售可以通过个人渠道获取客户信息, 自己录入到系统中, 或者销售主管或网络咨询师将已经录入系统的客户分配给销售.销售需要在规定时间间隔内对客户进行跟进或回访, 将跟进信息记录到系统中, 根据不同的情况标记客户的报名意向.当客户确定报名时需要让客户本人或者销售帮忙添加报名表.当销售收到客户缴纳的费用时, 需要填写缴费记录, 并将费用转交财务进行审批.
  27. CRM中有哪些技术点?

    中间件:用于进行访问权限校验
    filter:权限控制在按钮级别
    modelformset:权限的批量操作
    session:保存权限和菜单的数据结构
    inclusion_tag:动态生成二级菜单和路径导航
  28. 为什么不用现成的crm而是自己去开发?

    为了适应公司内部的业务需求而定制功能进行开发
  29. 请简述实现权限控制的流程。

    在web应用中, 一个URL代表一个权限, 可以访问某一URL则说明有该权限. 该权限系统中URL被分为两种, 一种是可以做二级菜单的父权限, 一种是不能做菜单的子权限. Menu表中的数据称之为一级菜单, 二级菜单被分配给一级菜单. 子权限分配给父权限.
    
    当用户登录成功时, 根据用户所有的角色查询出所具有的权限, 将权限信息和菜单信息存放在session中. 登录成功后跳转至其他URL时, 请求经过中间件时进行权限的校验, 根据当前访问的url和session中存放的权限信息进行正则匹配. 都匹配不成功, 则拒绝访问. 匹配成功则继续走正常的流程得到相应的响应.
    
    页面中的可点击的按钮也是权限, 在模板渲染时使用自定义filter判断该按钮所代表的权限是否在该用户所拥有的权限中, 如果是则显示该按钮, 否则不显示.
  30. 列举权限有多少张表?表中都有那些字段?

    菜单表:menu
    权限表:Permission
    角色表:Role
    用户表:User
    角色和权限关系表
    用户和角色关系表
  31. 为什么要把权限信息放到session中?权限信息放到session有什么优缺点?

    将权限和菜单的字典存放在session中是为了给不同用户存放不同的权限和菜单, 并且session可以存放在Redis中, 读取速度快.
  32. 权限控制到按钮级别是如何实现的?

    session中存放着一个有关权限信息的字典, 字典的key为权限的URL别名, value为一个权限的具体信息.自定义了一个filter, 用来判断某一个权限是否在该用户的权限字典中, 在的话返回True, 不在返回False.模板中使用该filter来对每个要生成按钮的部分做判断, 有权限则会显示按钮, 没有权限则不显示.
  33. 如何实现把权限粒度控制到数据行?

  34. 简述如何将rbac组件应用到一个新项目中.

    (1)拷贝rbac组件到新的项目中, 注册app
    (2)修改用户表, 继承rbac中的User表
    (3)执行数据库迁移指令
        1)删除rbac下migrations中的记录
        2)注释掉admin中的User表
        3)roles=models.ManyToManyField(to=Role, verbose_name='用户拥有的角色', blank=True) 注意: 关联的字段不要写成字符串形式
    (4)设置rbac的url
    
    (5)菜单管理
    (6)权限的录入
        1)所有的url要有name
        2)不要忽略rbac 的namespace
        3)注意url和别名的长度
        4)构建层级结构
    (7)角色管理
    (8)分配权限
        1)注意用新的用户表替换rbac中的User
        2)给不同角色分配权限
        3)给不同用户分配角色
    (9)应用权限
        1)应用中间件 -- 在settings.py中写上权限的配置
        2)登录成功后权限信息的初始化
    (10)动态生成二级菜单
    (11)应用路径导航
    (12)权限控制到按钮级别
posted @ 2020-03-02 11:27  甄py  阅读(65)  评论(0)    收藏  举报