drf全局异常处理:
只要三大认证,视图类的方法出了异常,都会执行一个函数:rest_framework.views import exception_handler
setting:
REST_FRAMEWORK = {
'EXCEPTION_HANDLER': 'app01.exception.commn_exception_handler',
# 导入自己写的异常类的路径
}
view内:
from rest_framework.exceptions import APIException
class BookView(APIView):
def get(self, request):
ordering = request.query_params.get('ordering')
name = request.query_params.get('name')
book_list = Book.objects.all()
raise APIException('这是drf模块的异常')
自己写的全局异常方法中:
from rest_framework.views import exception_handler
from rest_framework.response import Response
def commn_exception_handler(exc, context):
res=exception_handler(exc,context)
if res:
if isinstance(res.data,dict):
detail=res.data.get('detail')
else:
detail=res.data
return Response({'code':999,'msg':detail})
else:
return Response({'code':998,'msg':str(exc)})
注意:exception_handler
如果异常对象是drf的APIException对象,就会返回Response
exception_handler只处理了drf的异常,其它的异常需要我们自己处理
如果异常对象不是drf的APIException对象,就会返回None
接口文档的编写形式
-1 world,md,编写,大家都可以操作,写完放在git,公司的文档管理平台上
-2 第三方的接口文档平台(收费)
https://www.showdoc.com.cn/
-3 公司自己开发接口文档平台
-4 公司使用开源的接口文档平台,搭建
-YAPI:百度开源的
-https://zhuanlan.zhihu.com/p/366025001
-5 项目自动生成接口文档
-coreapi
-swagger
使用coreapi自动生成接口文档:
view中:
from rest_framework.mixins import CreateModelMixin, UpdateModelMixin, RetrieveModelMixin, ListModelMixin, \
DestroyModelMixin
from rest_framework.viewsets import GenericViewSet
class BookView(GenericViewSet, ListModelMixin, CreateModelMixin):
queryset = Book.objects.all()
serializer_class = BookSerializer
'''
List:
返回所有图书信息
Create:
增加图书
'''
class BookDetailView(GenericViewSet, UpdateModelMixin, RetrieveModelMixin, DestroyModelMixin):
queryset = Book.objects.all()
serializer_class = BookSerializer
'''
Update:
修改图书
Retrieve:
查看某个单本图书
Destroy:
删除图书
'''
url中:
from rest_framework.routers import SimpleRouter
from rest_framework.documentation import include_docs_urls #此条路径需要添加
router=SimpleRouter()
router.register('books',views.BookView,'books')
router.register('books1',views.BookDetailView,'books1')
urlpatterns = [
path('admin/', admin.site.urls),
path('docs/', include_docs_urls(title='526战略项目')), # path中需要加入此路径
# path('books/',views.BookView.as_view()),
path('api/v1/',include(router.urls))
]
settings中:
REST_FRAMEWORK = {
'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
}
前端展示页面:http://127.0.0.1:8000/docs/
序列化类中:
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = ['name', 'price', 'publish_obj', 'publish']
extra_kwargs = {
'name': {'help_text': '图书的书名'}, #给前端展示的注释
'price': {'help_text': '图书的价格'}, #给前端展示的注释
'publish': {'write_only': True},
}
-使用步骤:
-1 安装:pip3 install coreapi
-2 加一个路由
from rest_framework.documentation import include_docs_urls
urlpatterns = [
path('docs/', include_docs_urls(title='站点页面标题'))
]
-3 在视图类上加注释
-4 配置文件中配置:
'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
-5 表模型或序列化类的字段上写 help_text--->会显示在接口文档的字段介绍上
-6 访问地址:
http://127.0.0.1:8000/docs/
cookie,session,token发展历史
-会话管理
-cookie:客户端浏览器的键值对
-session:服务的的键值对(djangosession表,内存中,文件,缓存数据库)
-token:服务的生成的加密字符串,如果存在客户端浏览器上,就叫cookie
-三部分:头,荷载,签名
-签发:登录成功,签发
-认证:认证类中认证
import json
import base64
d={'username':'ydh','password':123}
d_str=json.dumps(d)
res=base64.b64encode(bytes(d_str,encoding='utf-8'))
print(res)
base64解码:
res=base64.b64decode('eyJ1c2VybmFtZSI6ICJ5ZGgiLCAicGFzc3dvcmQiOiAxMjN9')
print(res)
base64并不是一种加密方式,只是编码解码方式