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规范的接口程序

  

posted on 2020-08-29 06:00  大话人生  阅读(334)  评论(0)    收藏  举报