Vue模块
1、Vue都有哪些指令,简单说说?
"""
Vue里面常见指令有文本指令:v-text、v-html,属性指令:v-bind,方法指令:v-on,条件指令:v-if、v-show,循环指令:v-for
v-html在v-text基础上,还可以解析html代码
v-show是以display:none方式来渲染隐藏的标签,v-if会真的隐藏标签不渲染
"""
2、简单聊一聊Vue组件化开发
"""
Vue中的每一个组件就是一个vue实例,也就是vue对象。
组件是由html、css、js组成的独立的页面结构单位,可以完成页面结构的代码复用
一般我们先定义一个组件,然后在使用的父组件中注册,最后使用定义的组件
定义组件template里写html,style中写样式,script中写逻辑
"""
3、vue中你用过哪些第三方插件
"""
vue中最常用的插件有
管理路由的vue-router,管理组件间数据仓库的vuex
还使用了vue-cookies来管理cookie,axios来完成前后台的ajax交互
"""
drf模块
1、什么是web接口,restful接口规范
"""
web接口有四个特点:规定前后台的交互方式;请求的链接;请求的参数;响应的数据结果
restful接口规范可以分三块来讲:请求链接,请求方式,响应结果
请求链接,采用https协议,带api字眼,操作的数据对象称之为资源,用资源名词即可,不需要出现动词,还可以出现一些接口版本的字眼v1,v2,还可以添加资源的过滤条件:limit、ordering
请求方式:get表示查,post表示增,put、patch表示改,delete表示删
响应结果:结果不同,状态码不同;结果中要有数据相关信息:数据状态码,数据信息,数据体;必要的时候,需要返回链接辅助下一次资源请求
"""
2、drf中有哪些常用模块
"""
drf中核心组件有:序列化组件、认证组件、权限组件、频率组件
drf中还提供了 解析组件、响应组件、异常组件、分页器组件、过滤器组件等
"""
3、说一说你都用过哪些序列化组件类
"""
底层的Serializer类,和Model表结合使用的ModelSerializer类,还有处理群增全改接口的ListSerializer类
"""
4、怎么样自定义序列化类
"""
定义一个类,集成Serializer类或ModelSerializer类
然后在子类Meta中,绑定model类,然后在设置序列化字段fields
还可以写一堆局部全局钩子完成自定义校验规则
"""
5、简述一下drf三大认证源码
"""
drf的接口请求,需要先进行认证组件,校验得到登录用户,然后在进行权限组件,完成用户权限校验,最后进行频率组件,完成频率限制
认证组件源码所干的事,就是从请求头中拿到认证token,如果没有,就不进行认证校验,直接去进行权限校验,如果有,校验提供就是合法用户,保存在request.user中,如果没有,直接抛异常返回到前台,就是非法用户
权限组件源码所干的事,需要看哪个权限类,但都是挺简单的,IsAuthenticated就是校验是否有request.user,且是否能完成auth认证,IsAuthenticatedOrReadOnly就是先判断请求方式,get这类就不限制,post这些请求才需要进行校验,规则和IsAuthenticated一样
频率组件源码很多,主要是根据用户特有的一些请求信息,如登录用户的主键,来记录用户访问的几次,访问后就会在django缓存cache中记录,在规定时间内,超次就会限制
"""
6、如何自定义认证类
"""
自定义认证类,继承BaseAuthentication(或其子类),重写authenticate
在authenticate方法中中完成以下逻辑
从请求中拿到认证标识 token
反解析出用户 user
前两步操作失败 返回None,代表游客
前两步操作成功 返回user,auth,代表登录用户
注:如果在某个分支抛出异常,直接定义失败,代表非法用户
"""
7、如何自定义权限类
"""
自定义频率类,继承SimpleRateThrottle,重写get_cache_key,明确scope字符串
在settings.py配置文件中的DEFAULT_THROTTLE_RATES配置scope字符串对应的限制条件,如:3/min(一分钟3次)
在get_cache_key中返回作为限制标识的字符串
"""
8、简述drf中的视图类
"""
APIView是基础的视图类,完成基础的cbv的请求响应,比django的View类多了一堆类属性,比如authentication_classes就可以配置该视图类的认证器
GenericAPIView继承APIView的,在APIView基础上,可以通过设置queryset、serializer_class两个类属性更好的配合model类完成资源的请求
mixins中提供了一些视图类的工具方法,帮我们封装了基础的get、post这些请求动作
viewsets视图集,重写了as_view方法,可以将get请求不再固定映射给get方法,可以映射给自定义方法
"""
路飞模块
1、简述git常用命令
"""
查看状态:git status
添加:git add .
提交:git commit -m '信息'
拉:git pull 源 分支
推:git push 源 分支
分支:git branch、git merge
"""
2、简述前后台跨域问题
"""
跨域本质是后台响应头出现了问题,做出的响应,前台无法解析
如果前后台的请求协议、所在服务器(ip)、所属应用(端口),有一个不一致,就属于跨域
"""
3、django如何解决跨域
"""
可以用django-cors-headers模块来解决跨域,具体做法可以概括如下
1、安装django-cors-headers模块
2、在settings.py中配置
# 注册app
INSTALLED_APPS = [
...
'corsheaders'
]
# 添加中间件
MIDDLEWARE = [
...
'corsheaders.middleware.CorsMiddleware'
]
# 允许跨域源
CORS_ORIGIN_ALLOW_ALL = True
"""
4、用过短信认证吗?简述一下
"""
用过腾讯云的短信认证,根据官方的API来完成,安装短信认证的模块,可以实现单发短信,群发短信已经语音短信等功能,实现起来也挺简单,先申请签名与模板,然后配置好,得到发送对象,用发送对象调用特定的方法,就可以完成特定的功能
"""
5、用过celery框架吗?
"""
celery为异步任务框架,启动celery,会启动一个工作对象worker,会去任务队列中获取任务,然后执行,执行结果放到结果仓库中,所以任务队列和结果仓库都可以用效率高的数据库完成存储,我采用的是redis数据库。
我用celery异步任务框架主要是来完成接口缓存的更新,已经支付成功后的短信推送
"""
6、接口缓存是如何实现的?
"""
首先我会对那些经常访问的,且数据一般不做更新的接口进行缓存,建立好缓存的key,采用redis数据库,工作原理就是先走缓存,缓存没有才走mysql数据库,同时建立缓存
一般建立缓存的接口大多为主页固定展示的接口
"""
7、简述一下你是如何完成短信推送的?
"""
其实实现起来挺简单的,就是在用户完成支付后,支付宝会回调后台,通知支付成功,那在修改后台支付的订单状态后,在推送一条支付成功的短信给用户即可
"""
8、讲述一下支付流程
"""
支付流程可以分三块
1、前台请求后台,提交订单信息,获得支付链接
2、前台渲染支付链接,访问支付宝后台完成支付
3、支付宝进行同步与异步回调,访问后台,在后台完成订单状态的修改,以及订单支付成功的推送
"""
9、你了解支付宝的异步回调吗?
"""
了解,支付宝的回调,会前后进行8次,第一次就是你在支付宝完成支付后,立即回调你的后台,然后在间隔时间回调你的后台,间隔时间逐渐增长,让你后台接收到支付成功的回调后,修改订单状态后,要响应字符串 Success,那么支付宝就知道你后台完成了订单状态的修改,就停止接下来的异步回调
"""
10、你独立进行过项目上线吗?