zoukankan      html  css  js  c++  java
  • django面试二

    33. django的缓存能使用redis吗?如果可以的话,如何配置?

    #1.安装 pip install django-redis
    #2.在stting中配置CACHES,可以设置多个缓存,根据名字使用
    CACHES = {
    "default": {
    "BACKEND": "django_redis.cache.RedisCache",
    "LOCATION": "redis://127.0.0.1:6379",
    "OPTIONS": {
    "CLIENT_CLASS": "django_redis.client.DefaultClient",
    "CONNECTION_POOL_KWARGS": {"max_connections": 100}
    # "PASSWORD": "密码",
    }
    }
    },
    #另添加缓存
    "JERD": { }
    #3.根据名字去连接池中获取连接
    from django_redis import get_redis_connection
    conn = get_redis_connection("default")

    34. django的模板中filter和simple_tag的区别?

    # 自定义filter:{{ 参数1|filter函数名:参数2 }}
    # 1.可以与if标签来连用
    # 2.自定义时需要写两个形参
    # simple_tag:{% simple_tag函数名 参数1 参数2 %}
    # 1.可以传多个参数,没有限制
    # 2.不能与if标签来连用

    35. django-debug-toolbar的作用?

    #1.是django的第三方工具包,给django扩展了调试功能
    #包括查看sql语句,db查询次数,request,headers等

    36. django中如何实现单元测试?

    37. 解释orm中 db first 和 code first的含义?

    #数据持久化的方式:
    #db first基于已存在的数据库,生成模型
    #code first基于已存在的模型,生成数据库库

    38. django中如何根据数据库表生成model中的类?

    #1.在settings中设置要连接的数据库
    #2.生成model模型文件
    #python manage.py inspectdb
    #3.模型文件导入到models中
    # python manage.py inspectdb > app/models.py

    39. 使用orm和原生sql的优缺点?

    #1.orm的开发速度快,操作简单。使开发更加对象化
    #执行速度慢。处理多表联查等复杂操作时,ORM的语法会变得复杂
    #2.sql开发速度慢,执行速度快。性能强

    40. django的contenttype组件的作用?

    #这个组件保存了项目中所有app和model的对应关系,每当我们创建了新的model并执行数据库迁移后,ContentType表中就会自动新增一条记录
    #当一张表和多个表FK关联,并且多个FK中只能选择其中一个或其中n个时,可以利用contenttypes
    41. 谈谈你对restful规范的认识?

    #首先restful是一种软件架构风格或者说是一种设计风格,并不是标准,它只是提供了一组设计#原则和约束条件,主要用于客户端和服务器交互类的软件。
    #就像设计模式一样,并不是一定要遵循这些原则,而是基于这个风格设计的软件可以更简洁,更#有层次,我们可以根据开发的实际情况,做相应的改变。
    #它里面提到了一些规范,例如:
    #1.restful 提倡面向资源编程,在url接口中尽量要使用名词,不要使用动词
    #2、在url接口中推荐使用Https协议,让网络接口更加安全
    #https://www.bootcss.com/v1/mycss?page=3
    #(Https是Http的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,
    #因此加密的详细内容就需要SSL(安全套接层协议))
    #3、在url中可以体现版本号
    #https://v1.bootcss.com/mycss
    #不同的版本可以有不同的接口,使其更加简洁,清晰
    #4、url中可以体现是否是API接口
    #https://www.bootcss.com/api/mycss
    #5、url中可以添加条件去筛选匹配
    #https://www.bootcss.com/v1/mycss?page=3
    #6、可以根据Http不同的method,进行不同的资源操作
    #(5种方法:GET / POST / PUT / DELETE / PATCH)
    #7、响应式应该设置状态码
    #8、有返回值,而且格式为统一的json格式
    #9、返回错误信息
    #返回值携带错误信息
    #10、返回结果中要提供帮助链接,即API最好做到Hypermedia
    #如果遇到需要跳转的情况 携带调转接口的URL
      ret = {
    code: 1000,
    data:{
    id:1,
    name:'小强',
    depart_id:http://www.luffycity.com/api/v1/depart/8/

    42. 接口的幂等性是什么意思?

    #1.是系统的接口对外一种承诺(而不是实现)
    #2.承诺只要调用接口成功,外部多次调用对系统的影响都是一致的,不会对资源重复操作

    43. 什么是RPC?

    #远程过程调用 (RPC) 是一种协议,程序可使用这种协议向网络中的另一台计算机上的程序请求服务
    #1.RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。
    #2.首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。
    #2.在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,
    #3.最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

    44. 为什么要使用API

    #系统之间为了调用数据。
    #数据传输格式:
    # 1.json
    # 2.xml

    45. 为什么要使用django rest framework框架?

    #能自动生成符合 RESTful 规范的 API
    #1.在开发REST API的视图中,虽然每个视图具体操作的数据不同,
    #但增、删、改、查的实现流程基本一样,这部分的代码可以简写
    #2.在序列化与反序列化时,虽然操作的数据不同,但是执行的过程却相似,这部分的代码也可以简写
    #REST framework可以帮助简化上述两部分的代码编写,大大提高REST API的开发速度

    46. django rest framework框架中都有那些组件?

    #1.序列化组件:serializers 对queryset序列化以及对请求数据格式校验
    #2.路由组件routers 进行路由分发
    #3.视图组件ModelViewSet 帮助开发者提供了一些类,并在类中提供了多个方法
    #4.认证组件 写一个类并注册到认证类(authentication_classes),在类的的authticate方法中编写认证逻
    #5.权限组件 写一个类并注册到权限类(permission_classes),在类的的has_permission方法中编写认证逻辑。
    #6.频率限制 写一个类并注册到频率类(throttle_classes),在类的的allow_request/wait 方法中编写认证逻辑
    #7.解析器 选择对数据解析的类,在解析器类中注册(parser_classes)
    #8.渲染器 定义数据如何渲染到到页面上,在渲染器类中注册(renderer_classes)
    #9.分页 对获取到的数据进行分页处理, pagination_class
    #10.版本 版本控制用来在不同的客户端使用不同的行为
    #在url中设置version参数,用户请求时候传入参数。在request.version中获取版本,根据版本不同 做不同处理

    47. django rest framework框架中的视图都可以继承哪些类?

    #class View(object):
    #class APIView(View): 封装了view,并且重新封装了request,初始化了各种组件
    #class GenericAPIView(views.APIView):
    #1.增加了一些属性和方法,如get_queryset,get_serializer
    #class GenericViewSet(ViewSetMixin, generics.GenericAPIView)
    #父类ViewSetMixin 重写了as_view,返回return csrf_exempt(view)
    #并重新设置请求方式与执行函数的关系
    #class ModelViewSet(mixins.CreateModelMixin,
    # mixins.RetrieveModelMixin,
    # mixins.UpdateModelMixin,
    # mixins.DestroyModelMixin,
    # mixins.ListModelMixin,
    # GenericViewSet):pass
    #继承了mixins下的一些类,封装了list,create,update等方法
    #和GenericViewSet

    48. 简述 django rest framework框架的认证流程

    #1.用户请求走进来后,走APIView,初始化了默认的认证方法
    #2.走到APIView的dispatch方法,initial方法调用了request.user
    #3.如果我们配置了认证类,走我们自己认证类中的authentication方法

    49. django rest framework如何实现的用户访问频率控制

    #使用IP/用户账号作为键,每次的访问时间戳作为值,构造一个字典形式的数据,存起来,每次访问时对时间戳列表的元素进行判断,
    #把超时的删掉,再计算列表剩余的元素数就能做到频率限制了
    #匿名用户:使用IP控制,但是无法完全控制,因为用户可以换代理IP登录用户:使用账号控制,但是如果有很多账号,也无法限制

    50. rest_framework序列化组件的作用,以及一些外键关系的钩子方法

    #作用:帮助我们序列化数据
    #1.choices get_字段名_display
    #2.ForeignKey source=orm 操作
    #3.ManyToManyFiled SerializerMethodField()
    # def get_字段名():
    # return 自定义

    51. 给用户提供一个接口之前需要提前做什么

    #1.跟前端进行和交互,确定前端要什么
    #2.把需求写个文档保存

    52. PV和UV

    #1.pv:页面访问量,每打开一次页面PV计算+1,页面刷新也是
    #2.UV:独立访问数,一台电脑终端为一个访客

    53. 什么是跨域以及解决方法:

    #跨域:
    # 浏览器从一个域名的网页去请求另一个域名的资源时,浏览器处于安全的考虑,不允许不同源的请求
    #同源策略:
    # 协议相同
    # 域名相同
    # 端口相同
    #处理方法:
    # 1.通过JSONP跨域
    # JSON是一种数据交换格式
    # JSONP是一种非官方的跨域数据交互协议
    # jsonp是包含在函数调用中的json
    # script标签不受同源策略的影响,手动创建一个script标签,传递URL,同时传入一个回调函数的名字
    # 服务器得到名字后,返回数据时会用这个函数名来包裹住数据,客户端获取到数据之后,立即把script标签删掉
    # 2.cors:跨域资源共享
    # 使用自定义的HTTP头部允许浏览器和服务器相互通信
    # 1.如果是简单请求,直接设置允许访问的域名:
    # 允许你的域名来获取我的数据
    # response['Access-Control-Allow-Origin'] = "*"
    # 2.如果是复杂请求,首先会发送options请求做预检,然后再发送真正的PUT/POST....请求
    # 因此如果复杂请求是PUT等请求,则服务端需要设置允许某请求
    # 如果复杂请求设置了请求头,则服务端需要设置允许某请求头
    #简单请求:
    # 一次请求
    #非简单请求:
    # 两次请求,在发送数据之前会先发一次请求用于做“预检”,
    # 只有“预检”通过后才再发送一次请求用于数据传输。

    #只要同时满足以下两大条件,就属于简单请求。
    # (1) 请求方法是以下三种方法之一:HEAD GET POST
    # (2)HTTP的头信息不超出以下几种字段:
    # Accept
    # Accept-Language
    # Content-Language
    # Last-Event-ID
    # Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、 text/plain
    #JSONP和CORS:
    # 1.JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求
    # 2.jsonp需要client和server端的相互配合
    # 3.cors在client端无需设置,server端需要针对不同的请求,来做head头的处理
    54. 如何实现用户的登陆认证

    #1.cookie session
    #2.token 登陆成功后生成加密字符串
    #3.JWT:json wed token缩写 它将用户信息加密到token中,服务器不保存任何用户信息
    #服务器通过使用保存的密钥来验证token的正确性
    55. 如何将dict转换成url的格式:

    #使用urlencode
    from urllib.parse import urlencode
    post_data={"k1":"v1","k2":"v2"}
    ret=urlencode(post_data)
    print(ret,type(ret)) #k1=v1&k2=v2 <class 'str'>

  • 相关阅读:
    从锅炉工到AI专家(1)
    【Offer】[47] 【礼物的最大价值】
    【Offer】[46] 【把数字翻译成字符串】
    【Offer】[45]【把数组排成最小的数】
    【Offer】[44] 【数字序列中某一位的数字】
    【Offer】[43] 【1~n整数中1出现的次数】
    【Offer】[42] 【连续子数组的最大和】
    【Offer】[41] 【数据流中的中位数】
    【Offer】[40] 【最小的K个数】
    【Offer】[39] 【数组中出现次数超过一半的数字】
  • 原文地址:https://www.cnblogs.com/duanlinxiao/p/10540255.html
Copyright © 2011-2022 走看看