复习
'''
vue指令:
v-text | v-html | v-once
v-bind | v-on => : | @
v-model
v-show |v-if | v-else-if | v-else
v-for
vue成员:
el | template | data | method watch computed filter props components
vue文件组件:
<tempkate>
<div>
...
</div>
</tempkate>
<script>
exprt default {
...
}
</script>
<style scope>
</style>
'''
drf
DRF是一个强大灵活的Django工具包,用于在Web后台构建Restful接口
'''
Django-rest framework
drf是django的插件,所以要提前安装django
按命令:pip install djangorestframework
使用drf时,要在settings中注册
'''
接口
'''
drf:django-restframework
drf框架的作用:写接口
什么是接口:
规定了提交请求参数的请求方式,访问其可以获取响应的反馈数据的url链接
四部分:url链接+请求方式+请求参数+响应数据
url:长得像返回数据的url链接
https//api.map.baidu.com/place/v2/search
请求方式:get post put patch delete
采用get方式请求上方接口
请求参数:json或xml格式的key-value类型数据
ak:43542545cfdscds342
region:上海
query:肯德基
output:json
响应结果:json或xml格式的数据
上方请求参数的output参数值决定了响应数据的格式
怎么写接口:
参照某种规则(规范)书写url链接,同时根据规则制定请求方式,请求数据与响应结果
接口文档:
提供给前台开发人员与测试人员查看
Yapi
接口规范:
webapi接口规范:restful
'''
接口文档的编写
YApi是去哪网大前端技术中心的一个开源可视化 接口管理平台。
YApi项目可以搭建在任何本地或服务器上,完成后台项目开发时的接口编写。为开发、测试等人员提供可视化的接口预览
YApi网址
restful接口规范
'''
get post put patch delete
url链接:
1、接口都是操作前后台数据的,所以需要保证数据的安全性 采用https协议
2、接口用来操作数据,与网址(操作页面)有区别,所以用特定的关键字表示接口
api关键字:-https://api.baidu.com
-https://www.baidu.com/api
3、接口操作的数据称之为 资源,在url中只体现 资源 名称(名词)。不体现操作资源的方式动词:
常规资源接口
-http://api.baidu.com/books/
非常规接口-和某资源不是特别密切或者不是一种资源
-http://api.baidu.com/login/
-http://api.baidu.com/place/search/
4、如果一个资源存在多个版本结果,在url链接中要用特定符号来兼容多版本共存
v1 | v2
-http://api.baidu.com/v1/books/
-http://api.baidu.com/v2/books/
5、群资源操作:一般还有额外的限制条件,如排序、限制,限制调试、分页等等
?限制条件
-http://api.baidu.com/v1/books/?ordering=price&limit=3
请求方式
6、五大请求方式
get:获取单个或多个资源
-http://api.baidu.com/books/ 群查,返回多个结果对象
-http://api.baidu.com/books/(pk)/ 单查,返回单个结果对象
post:新增单个或多个资源
-http://api.baidu.com/books/
单增,提交单个数据字典,完成单增,返回单个结果对象
群增,提供多个数据字典的数组,完成群增,返回多个结果对象
put:整体修改单个或多个资源
-http://api.baidu.com/books/ 整体修改多个,提供多个数据字典的数组(数据字典中药包含主键),完成群改,返回多个结果对象
-http://api.baidu.com/books/(pk)/ 整体修改单个,提供单个数据字典(主键在url中体现),完成单改,返回单个结果对象
patch局部修改单个或多个资源
方式与put完全相同,不同的是:操作的资源如果有5个key-value键值对,put请求提供的字典必须全包含,但是patch提供的字典包含的键值对0~5个都可以
delete:删除单个或多个资源
-http://api.baidu.com/books/ 多删,提供多个资源主键数据,完成群删,不做任何资源返回(一般我们会返回结果信息:成功|失败)
-http://api.baidu.com/books/(pk)/ 单删,不需要提供额外数据,完成单删,不做任何资源返回(一般我们会返回结果信息:成功|失败)
响应结果
7、响应对象中要包含网络状态码(网络状态信息和网络状态码捆绑出现,不要额外设置)
1xx:基本信息
2xx:成功 -200基本 201新增成功
3xx:重定向
4xx:客户端错误 -400cuowu 请求;403请求无权限;404请求资源不存在
5xx:服务端错误 -服务器错误
8、数据状态码(一般都是前后台约定规则)
0:成功
1:失败 -1xx;具体失败信息(要在接口文档中明确写出)
2:无数据 -2xx:具体无数据信息(要在接口文档中明确写出)
9、数据状态信息(一般不仅仅是对数据状态码的解释,更多的是对结果的描述,给前台开发者阅读的)
10、数据结果(常量、数组、字典),如果有子资源(图片、音频、视频),返回资源的url链接
{
"status": 0,
"msg": 'ok',
"results": [{
"name": "西游记",
"img": "https://api.baidu.com/media/book/xyj.png"
}]
}
'''
drf请求周期 -CBV
CBV源码
as_view()=>view()=>dispatch()=>视图类的视图方法get | post
#as_view
@classonlymethod
def as_view(cls, **initkwargs):
for key in initkwargs:…… # initkwargs没有进行赋值,该逻辑不会执行
def view(request, *args, **kwargs): # 请求来了完成响应的函数
self = cls(**initkwargs) # cls是我们自己写的类 MyLogin self是我们自己定义的类的对象
self.request = request # wsgi协议包装数据后的request
self.args = args # 无名分组参数
self.kwargs = kwargs # 有名分组参数
return self.dispatch(request, *args, **kwargs) # view返回什么,用户就能看到什么
# 将请求来调用view的修改信息保存在view对象中
view.view_class = cls
view.view_initkwargs = initkwargs
# 看源码的时候一定要注意在查找属性和方法的时候先从对象自身找,再去类中查找,再去父类查找
return view # 返回请求调用的函数地址,进行路由绑定 base.py
#请求来了完成响应的函数
def view(request, *args, **kwargs)
#将请求来调用view的修改信息保存在view对象中
view.view_class = cls
view.view_initkwargs = initkwargs
#返回请求调用的函数地址,进行路由绑定
return view
#dispatch
def dispatch(self, request, *args, **kwargs):
# Try to dispatch to the right method; if a method doesn't exist,
# defer to the error handler. Also defer to the error handler if the
# request method isn't on the approved list.
# 判断当前请求方式在不在默认的八个方法内
# 1.先以GET请求为例
if request.method.lower() in self.http_method_names:
# 利用反射去我们自己定义类的对象中查找get属性或者是方法 getattr(obj,'get')
# handler = get方法
handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
else:
handler = self.http_method_not_allowed
return handler(request, *args, **kwargs) # 调用get方法
CBV生命周期与debug
urls.py
from app01 import views
urlpatterns = [
# url(r'^admin/', admin.site.urls),
url(r'^book/$',views.BookView.as_view()),
url(r'^book/(?P<pk>)/$',views.BookView.as_view()),
]
views.py
from django.shortcuts import render
from django.http import JsonResponse
from django.views import View
from . import models
# Create your views here.
# 一个视图类可以保护常规五个请求方法:get|post|put|patch|delete
# 五个请求方法处理十个资源操作的逻辑:单群查|单群增|单群整体改|单群局部改|单群删
class BookView(View):
def get(self, request, *args, **kwargs):
pk = kwargs.get('pk')
if pk: # 单查
book_dic = models.Book.objects.filter(pk=pk).values('name', 'price').first()
if not book_dic:
return JsonResponse({
'status': 1,
'msg': '单查 资源不存在'
})
return JsonResponse({
'status': 0,
'msg': '单查 ok',
'results': book_dic
})
else: # 群查
book_query = models.Book.objects.values('name', 'price')
book_list = list(book_query)
return JsonResponse({
'status': 0,
'msg': '群查 ok',
'results': book_list
})
def post(self, request, *args, **kwargs):
return JsonResponse({
'status': 0,
'msg': 'put ok'
})
def put(self, request, *args, **kwargs):
return JsonResponse({
'status': 0,
'msg': 'put ok'
})
def patch(self, request, *args, **kwargs):
return JsonResponse({
'status': 0,
'msg': 'put ok'
})
def delete(self, request, *args, **kwargs):
return JsonResponse({
'status': 0,
'msg': 'put ok'
})
drf的基础组件:
请求、响应、渲染、解析、异常
drf的序列化(核心)
序列化 模型序列化 群操作序列化
drf的视图家族
视图类(常用) 视图工具类 工具视图类(常用)视图集
drf的三大认证(核心)
认证 权限 评率
drf的过滤
筛选 搜索 排序 分页 区间