文章目录
1、drf内容概况
1.1 django-rest-framework:drf,是一个app
1-drf-drf入门规范
2-drf-序列化组件
3-drf-请求与响应
4-drf-视图组件
5-drf-路由组件
6-drf-认证权限频率
7-drf-过滤排序分页异常处理
8-drf-自动生成接口文档
9-drf-JWT认证:token
10-drf-Xadmin的使用:第三方写的,比admin好看的后台管理
11-Book系列多表群操作
12-RBAC-基于角色的访问控制
django缓存,信号,跨域(cors:跨域资源共享)
2、web开发模式
2.1、前后端混合开发
模板语言是DTL,处理很多前端问题
2.2、前后端分离
前端是一个项目,后端是一个项目,前后端都写完后,要进行联调
前端:不仅仅指web前端,移动端和小程序
-web:Vue,react,HTML+css+jq
-移动端:iOS(object c,swift(很少用)),安卓(Java,kotlin)
-小程序:微信自己把js,html,css封装一些
发展到现在:大前端概念
-flutter:Dart
-uni-app:Vue框架
后端
后端只需要返回json格式字符串即可
3、api接口
1 /books/--->返回json格式数据--->/books/就是一个api接口
2 开放的api接口
-微博
-百度
3 api文档(前端开放看的)
4 典型的api接口
-https://api.weibo.com/2/statuses/home_timeline.json
4、 postman的使用
1 后端开放完,使用postman测试接口(api接口)
2 使用postman导出和导入测试接口(自己回去试一下)
3 公司测试平台
5、drf的安装和使用
1 djangorestframework:django的app,只能再django上使用
2 pip3 install djangorestframework
3 简单使用,看代码
django: 2.0.7 ,1版本也可以
djangorestframework:3.12.1
代码如下:
视图函数:
from rest_framework.response import Response
from rest_framework.views import APIView
from django.views import View
from django.http import JsonResponse
class MyView2(View):
def get(self,request):
return JsonResponse({'name':'lqz','age':18})
class MyView(APIView):
def get(self,request):
print(type(request))
return Response({'name': 'lqz', 'age': 18})
路由配置
urlpatterns = [
path('admin/', admin.site.urls),
path('drf/', views.MyView.as_view()),
path('raw/', views.MyView2.as_view()),
]
settings配置
import os
INSTALLED_APPS = [
'rest_framework'
]
6、cbv源码回顾
# drf:APIView的源码分析
def as_view(cls, **initkwargs):
# 这句话执行完成返回 view闭包函数的内存地址
view = super().as_view(**initkwargs) # 调用父类(View)的as_view
view.cls = cls
view.initkwargs = initkwargs
view=csrf_exempt(view) # 局部禁用csrf
return view
# 装饰器的使用方式
@csrf_exempt ====>view=csrf_exempt(view)
def view():
pass
# 请求来了,会执行上面返回的view()---->self.dispatch(APIView的dispatch)
# APIView的dispatch方法
def dispatch(self, request, *args, **kwargs):
# 把原生的request,封装进新的Request对象(drf的Request)
request = self.initialize_request(request, *args, **kwargs)
self.request = request
try:
# 重点(频率,认证,权限。。。)
self.initial(request, *args, **kwargs)
if request.method.lower() in self.http_method_names:
handler = getattr(self, request.method.lower(),
self.http_method_not_allowed)
else:
handler = self.http_method_not_allowed
# 这个request新的requst,是drf中Request对象
# response是原生response
response = handler(request, *args, **kwargs)
except Exception as exc:
# 全局异常
response = self.handle_exception(exc)
# 把原生response包装了一下
self.response = self.finalize_response(request, response, *args, **kwargs)
return self.response