1.给一个url,例如:http://192.168.1.103:8000/info/
发get请求:获取数据
发post请求:添加数据
发put请求:更新数据
发delete请求:删除数据
2.实现方式:
FBV:根据不同url,做出不同的相应,例如get请求为一个url,post为另一个url等,实现比较麻烦,也是可以作为前后端分离的接口使用的
CBV:即resful规范,同一个url,根据不同的method(请求方法,如GET、POST、DELETE、PUT等)做不同的区分
3.drf,基于django做的resful框架:
3.1.安装
pip install djangorestframework :安装命令
淘宝镜像安装:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple djangorestframework
豆瓣源安装:pip install -i http://pypi.douban.com/simple/ --trusted-host=pypi.douban.com/simple djangorestframework
djangorestframework其实就是django的一个app,一个app有视图、模型等
3.2.使用
3.2.1.导入:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', #导入rest_framework ]
3.2.2.视图中导入及使用
from rest_framework.views import APIView #导入rest_framework的APIView # Create your views here. #使用drf中的APIView写相应的get、post、delete、put等响应 class DrfInfoView(APIView): """ 咨询drf相关接口 """ def get(self,request,*args,**kwargs): #处理get请求 data = [ { "id":1, "title":"震惊了...王洋居然...", "content":"..." }, { "id": 2, "title": "震惊了...王洋居然...", "content": "..." }, { "id": 3, "title": "震惊了...王洋居然...", "content": "..." }, { "id": 4, "title": "震惊了...王洋居然...", "content": "..." }, ] return JsonResponse(data,safe=False) #返回数据为json格式 #使用Json格式,默认使用的是字典,当传递为列表时,需要使用safe=False,否则会报错:In order to allow non-dict objects to be serialized set the safe parameter to False. def post(self, request, *args, **kwargs): #处理post请求 pass def put(self, request, *args, **kwargs): #处理put请求 pass def delete(self, request, *args, **kwargs): #处理delete请求 pass
3.2.3.url中配置相应的url
from django.contrib import admin from django.urls import path from api import views #导入api应用中的views.py文件 urlpatterns = [ path('admin/', admin.site.urls), path('drf/info/', views.DrfInfoView.as_view()), # 咨询的url配置及视图函数 path('info/', views.InfoView.as_view()), # 咨询的url配置及视图函数 # path('info/', views.info), # 咨询的url配置及视图函数 # path('info/get/', views.info), #咨询的url配置及视图函数,查询 # path('info/add/', views.info), # 咨询的url配置及视图函数,增加 # path('info/update/', views.info), # 咨询的url配置及视图函数,更新 # path('info/delete/', views.info), # 咨询的url配置及视图函数,删除 ]
3.3.使用 rest_framework中的 Response
3.3.1:与3.2.1一样
3.3.2.视图中使用:
from rest_framework.views import APIView #导入rest_framework的APIView from rest_framework.response import Response #导入rest_framework的 Response # Create your views here. #使用drf中的APIView写相应的get、post、delete、put等响应,使用rest_framework中的response class DrfSelfResponseInfoView(APIView): """ 咨询drf相关接口 """ def get(self,request,*args,**kwargs): #处理get请求 data = [ { "id":1, "title":"震惊了...王洋居然...", "content":"..." }, { "id": 2, "title": "震惊了...王洋居然...", "content": "..." }, { "id": 3, "title": "震惊了...王洋居然...", "content": "..." }, { "id": 4, "title": "震惊了...王洋居然...", "content": "..." }, ] return Response(data) #使用rest_framework的 Response def post(self, request, *args, **kwargs): #处理post请求 pass def put(self, request, *args, **kwargs): #处理put请求 pass def delete(self, request, *args, **kwargs): #处理delete请求 pass
3.3.3.url配置:
from django.contrib import admin from django.urls import path from api import views #导入api应用中的views.py文件 urlpatterns = [ path('admin/', admin.site.urls), path('drf/response/info/', views.DrfSelfResponseInfoView.as_view()), # 咨询的url配置及视图函数 path('drf/info/', views.DrfInfoView.as_view()), # 咨询的url配置及视图函数 path('info/', views.InfoView.as_view()), # 咨询的url配置及视图函数 # path('info/', views.info), # 咨询的url配置及视图函数 # path('info/get/', views.info), #咨询的url配置及视图函数,查询 # path('info/add/', views.info), # 咨询的url配置及视图函数,增加 # path('info/update/', views.info), # 咨询的url配置及视图函数,更新 # path('info/delete/', views.info), # 咨询的url配置及视图函数,删除 ]
4.什么时候用drf:前后端分离,需要写接口的时候用
5.DRF的应用场景:参与前后端分离、参与为app写接口时,用drf会比较方便
6.总结:
6.1.restful规范:
给别人提供一个URL,根据URL请求方式的不同,做不同操作,如:
get,获取
post,增加
put,全部更新
patch,局部更新
delete,删除
6.2.drf框架:
不基于drf也可以实现restful规范,来开发接口程序,
使用了drf之后,可以快速帮我们开发实现restful规范的接口程序