• resful规范


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

      

  • 相关阅读:
    4-18
    Vue学习 2017-4-9
    前端杂谈
    不错的博客哦!
    待整理知识杂项
    Vue学习历程
    王工的权限理解
    【NX二次开发】图标图像
    【转】C++怎么读写windows剪贴板的内容?比如说自动把一个字符串复制.
    获取计算机名
  • 原文地址:https://www.cnblogs.com/jingzaixin/p/13580681.html
Copyright © 2020-2023  润新知