随笔 - 633,  文章 - 0,  评论 - 13,  阅读 - 48万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

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   大话人生  阅读(318)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示