5,Vue-vuex和axios-restful规范vue
vue项目:-- npm install @vue/cli -g-- 新建目录-- vue create 项目名称-- 测试启动项目 npm run serve-- npm i element-ui-- npm i vue-router-- 注册路由-- 新建router.js-- 导入vue 以及vue-router-- Vue.use(VueRouter);-- export default new VueRouter({routes: []})-- 在main.js 中导入 new VueRouter 的实例化对象-- 注册到Vue实例化对象中 ios
vuex就是一个,来协助公共通讯的,面试
能够在一个空目录下建立,vue-router
vue项目: -- npm install @vue/cli -g -- 新建目录 -- vue create 项目名称 -- 测试启动项目 npm run serve -- npm i element-ui -- npm i vue-router -- 注册路由 -- 新建router.js -- 导入vue 以及vue-router -- Vue.use(VueRouter); -- export default new VueRouter({ routes: [] }) -- 在main.js 中导入 new VueRouter 的实例化对象 -- 注册到Vue实例化对象中
整理笔记vuex
Vuex -- 集中式状态管理架构 -- 配置 -- npm install vuex -- import vuex from "vuex" -- Vue.use(vuex) -- let store = new vuex.Store({ state: { xxx: xxx }, getters: { xxx: function(state, getters){ return 处理后的数据 } }, mutations: {} }) -- const app = new Vue({ el: "#app", store: store }) -- 获取vuex中的数据 -- this.$store.state.xxx -- this.$store.getters.xxx -- 更改vuex中的数据 -- this.$store.commit("事件名称",data) -- mutations: { "事件名称": function(state, data){ state.xxx = data } } Axios -- 配置 -- npm install axios -- import axios from "axios" -- Vue.prototype.$axios = axios -- this.$axios.request({ url: "api....", method: "get", data: {}, params: {} }).then(function(data){ 注意this }).catch(function(data){ }) -- 跨域问题 restful -- REST 表征性状态转移 (资源状态转移) -- 资源 -- URI 统一资源标志符 URL 统一资源定位符 -- 统一资源接口 -- 对资源只开放一个接口 -- 根据HTTP请求方式的不一样对资源进行不一样的操做 -- 必定要遵循HTTP请求方式的语义 -- 先后端传递的是资源的表述 并非资源的自己 -- Accept -- 我可以解析的数据类型 -- ContentType -- 给你响应的数据类型 -- 资源的状态 -- 经过超连接的指引来告诉用户还有哪些资源状态能够进入 -- restful -- 只要遵循这个REST风格 咱们就叫作restful架构 -- 规范 10条 -- 核心思想 -- 面向资源去编程 url尽可能用名词 不要用动词 -- 根据method不一样对资源进行不一样操做 -- 在url中体现 -- 版本 -- api -- 过滤条件 -- https -- 返回的要求 -- 携带状态码 -- 返回值 -- get 返回查看全部数据 -- post 返回新增的数据 -- put/patch 返回更新这条数据 -- delete 返回值为空 -- 返回携带错误信息 -- 携带超连接
1. restful 规范(建议) 2. django rest framework框架 内容详细: 0. FBV、CBV CBV,基于反射实现根据请求方式不一样,执行不一样的方法。 原理: url -> view方法 -> dispatch方法(反射执行其余:GET/POST/DELETE/PUT) 流程: class StudentsView(View): def dispatch(self, request, *args, **kwargs): print('before') ret = super(StudentsView,self).dispatch(request, *args, **kwargs) print('after') return ret def get(self,request,*args,**kwargs): return HttpResponse('GET') def post(self, request, *args, **kwargs): return HttpResponse('POST') def put(self, request, *args, **kwargs): return HttpResponse('PUT') def delete(self, request, *args, **kwargs): return HttpResponse('DELETE') 继承(多个类共用的功能,为了不重复编写): from django.views import View class MyBaseView(object): def dispatch(self, request, *args, **kwargs): print('before') ret = super(MyBaseView,self).dispatch(request, *args, **kwargs) print('after') return ret class StudentsView(MyBaseView,View): def get(self,request,*args,**kwargs): print('get方法') return HttpResponse('GET') def post(self, request, *args, **kwargs): return HttpResponse('POST') def put(self, request, *args, **kwargs): return HttpResponse('PUT') def delete(self, request, *args, **kwargs): return HttpResponse('DELETE') class TeachersView(MyBaseView,View): def get(self,request,*args,**kwargs): return HttpResponse('GET') def post(self, request, *args, **kwargs): return HttpResponse('POST') def put(self, request, *args, **kwargs): return HttpResponse('PUT') def delete(self, request, *args, **kwargs): return HttpResponse('DELETE') 面试题: 1. django中间件 - process_request - process_view - process_response - process_exception - process_render_template 2. 使用中间件作过什么? - 权限 - 用户登陆验证 - django的csrf是如何实现? process_view方法 - 检查视图是否被 @csrf_exempt (免除csrf认证) - 去请求体或cookie中获取token 3. 状况一: MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', # 全站使用csrf认证 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] from django.views.decorators.csrf import csrf_exempt @csrf_exempt # 该函数无需认证 def users(request): user_list = ['alex','oldboy'] return HttpResponse(json.dumps((user_list))) 状况二: MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', #'django.middleware.csrf.CsrfViewMiddleware', # 全站不使用csrf认证 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] from django.views.decorators.csrf import csrf_exempt @csrf_protect # 该函数需认证 def users(request): user_list = ['alex','oldboy'] return HttpResponse(json.dumps((user_list))) CBV小知识,csrf时须要使用 - @method_decorator(csrf_exempt) - 在dispatch方法中(单独方法无效) 方式一: from django.views.decorators.csrf import csrf_exempt,csrf_protect from django.utils.decorators import method_decorator class StudentsView(View): @method_decorator(csrf_exempt) def dispatch(self, request, *args, **kwargs): return super(StudentsView,self).dispatch(request, *args, **kwargs) def get(self,request,*args,**kwargs): print('get方法') return HttpResponse('GET') def post(self, request, *args, **kwargs): return HttpResponse('POST') def put(self, request, *args, **kwargs): return HttpResponse('PUT') def delete(self, request, *args, **kwargs): return HttpResponse('DELETE') 方式二: from django.views.decorators.csrf import csrf_exempt,csrf_protect from django.utils.decorators import method_decorator @method_decorator(csrf_exempt,name='dispatch') class StudentsView(View): def get(self,request,*args,**kwargs): print('get方法') return HttpResponse('GET') def post(self, request, *args, **kwargs): return HttpResponse('POST') def put(self, request, *args, **kwargs): return HttpResponse('PUT') def delete(self, request, *args, **kwargs): return HttpResponse('DELETE') 总结: - 本质,基于反射来实现 - 流程:路由,view,dispatch(反射) - 取消csrf认证(装饰器要加到dispatch方法上且method_decorator装饰) 扩展: - csrf - 基于中间件的process_view方法 - 装饰器给单独函数进行设置(认证或无需认证) 1. restful 规范(建议) a. 接口开发 urlpatterns = [ # url(r'^admin/', admin.site.urls), url(r'^get_order/', views.get_order), url(r'^add_order/', views.add_order), url(r'^del_order/', views.del_order), url(r'^update_order/', views.update_order), ] def get_order(request): return HttpResponse('') def add_order(request): return HttpResponse('') def del_order(request): return HttpResponse('') def update_order(request): return HttpResponse('') b. restful 规范(建议) 1. 根据method不一样作不一样的操做,示例: 基于FBV: urlpatterns = [ url(r'^order/', views.order), ] def order(request): if request.method == 'GET': return HttpResponse('获取订单') elif request.method == 'POST': return HttpResponse('建立订单') elif request.method == 'PUT': return HttpResponse('更新订单') elif request.method == 'DELETE': return HttpResponse('删除订单') 基于CBV: urlpatterns = [ url(r'^order/', views.OrderView.as_view()), ] class OrderView(View): def get(self,request,*args,**kwargs): return HttpResponse('获取订单') def post(self,request,*args,**kwargs): return HttpResponse('建立订单') def put(self,request,*args,**kwargs): return HttpResponse('更新订单') def delete(self,request,*args,**kwargs): return HttpResponse('删除订单') c. 谈谈本身对restful api 规范的认识 10个规则 注意:推荐使用CBV 2. django rest framework框架 pip3 install djangorestframework a. 认证 - 仅使用: from django.views import View from rest_framework.views import APIView from rest_framework.authentication import BasicAuthentication from rest_framework import exceptions from rest_framework.request import Request class MyAuthentication(object): def authenticate(self,request): token = request._request.GET.get('token') # 获取用户名和密码,去数据校验 if not token: raise exceptions.AuthenticationFailed('用户认证失败') return ("alex",None) def authenticate_header(self,val): pass class DogView(APIView): authentication_classes = [MyAuthentication,] def get(self,request,*args,**kwargs): print(request) print(request.user) ret = { 'code':1000, 'msg':'xxx' } return HttpResponse(json.dumps(ret),status=201) def post(self,request,*args,**kwargs): return HttpResponse('建立Dog') def put(self,request,*args,**kwargs): return HttpResponse('更新Dog') def delete(self,request,*args,**kwargs): return HttpResponse('删除Dog') - 源码流程: dispatch...
1,使用https,安全,----------API与用户的通讯协议,老是使用HTTPs协议。 2,域名 https://api.example.com 尽可能将API部署在专用域名(会存在跨域问题) https://example.org/api/ API很简单, ---------------建议用这个, 3,版本 URL,如:https://api.example.com/v1/ -----用这个, 请求头 跨域时,引起发送屡次请求