二、初步编写drf API

2.1基于django

python 复制代码
#settings.py
urlpatterns = [
    path('admin/', admin.site.urls),
    path('auth',views.auth)                       #创建一个路由
]
python 复制代码
#views.py
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt

# Create your views here.

@csrf_exempt
def auth(request):
    return JsonResponse({'status':True,'message':'success'})

使用postman测试,可以看到有返回数据

2.2基于drf

1.安装drf

shell 复制代码
pip3 install djangorestframework

2.注册drf

python 复制代码
#settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app1.apps.App1Config',  # 添加应用名称(appName.apps.className)
    'rest_framework',        #注册drf
  
]

3、注册路由

python 复制代码
#url.py
urlpatterns = [
    path('admin/', admin.site.urls),
    path('auth/',views.auth),
    path('login1/',views.login),                   #drf视图路由(方法1:FBV)
    path('login2/',views.LoginView.as_view())       #drf视图路由(方法2:CBV)
]

4、创建drf视图函数

python 复制代码
#方法1:FBV: function basic views(基于函数的视图)
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework.decorators import api_view

@api_view(['GET'])                #视图函数前面需要加上一个装饰器
def login(request):
    return Response({'status':True,'message':'success'})
python 复制代码
#方法2:CBV: class basic views(基于类的视图)
class LoginView(APIView):
    def get(self,request):
        return Response({'status': True, 'message': 'success'})

5、查看效果

用浏览器访问login,这里可以看到,Response返回的信息,被drf的基本页面包裹(以上两种方法效果相同)

6、CBV示例1(jdango)

python 复制代码
from django.http import JsonResponse
from django.views import View
class UserView(View):
    #不同的请求,执行不同的值
    def get(self,request):
        #get请求执行的函数
        return JsonResponse({'status': True, 'message': 'GET'})
    def post(self,request):
        #post请求执行的函数
        return JsonResponse({'status': True, 'message': 'POST'})
    def put(self,request):
        #put请求执行的函数
        return JsonResponse({'status': True, 'message': 'PUT'})
    def delete(self,request):
        #delete请求执行的函数
        return JsonResponse({'status': True, 'message': 'DELETE'})

7、CBV示例2(drf)

python 复制代码
from rest_framework.response import Response
from rest_framework.views import APIView

class UserView1(APIView):  #drf中的函数自动套用了免除CRSF认证,相当于会自动给函数加一个@csrf_exempt装饰器
    def get(self,request):
        return Response({'status': True, 'message': 'GET'})
    def post(self,request):
        return Response({'status': True, 'message': 'POST'})
    def put(self,request):
        return Response({'status': True, 'message': 'PUT'})
    def delete(self,request):
        return Response({'status': True, 'message': 'DELETE'})
python 复制代码
#APIView底层代码
 def as_view(cls, **initkwargs):
        """
        用于免除CRSF认证
        Store the original class on the view function.

        This allows us to discover information about the view when we do URL
        reverse lookups.  Used for breadcrumb generation.
        """
 def dispatch(self, request, *args, **kwargs):
    #视图执行前、反射执行视图,视图后处理
    #判断用户请求类型,以执行相对应的函数
    # Try to dispatch to the right method; if a method doesn't exist,
    # defer to the error handler. Also defer to the error handler if the
    # request method isn't on the approved list.
相关推荐
鸽芷咕5 小时前
MySQL/PostgreSQL 迁移金仓 KES:LEFT JOIN 丢数据排查与避坑指南
数据库·mysql·postgresql
2401_8414956415 小时前
【数据结构】B+树
数据结构·数据库·c++·b+树·概念·结构·操作原理
Hardworking66617 小时前
第7章 软硬件系统集成
数据库·软硬件系统集成
名字还没想好☜17 小时前
Go 的 time.Ticker 陷阱:定时任务里被忽略的内存泄漏与正确关闭
java·数据库·golang·go·定时器
熊猫钓鱼>_>17 小时前
Redis 突发缓存穿透:一次完整的定位复盘
数据库·人工智能·redis·缓存·ai·agent·智能
wenb1n18 小时前
MySQL诊断系列(3/6):索引分析——5个SQL揪出“僵尸索引”
数据库·人工智能·编程语言
段一凡-华北理工大学18 小时前
向量数据库实战:选型、调优与落地~系列文章03:向量相似度算法全解:余弦、欧氏、内积,到底该用哪个?
大数据·数据库·人工智能·算法·机器学习·向量相似度·高炉炼铁
ClouGence19 小时前
CloudDM 数据库管理平台,全新 UI,更清晰、更高效!
数据库·开源
花生了什么事o21 小时前
DDD:领域驱动设计的初步认识
java·数据库
BGK11235821 小时前
基于qemu_v8+optee 4.00 平台构建 ca/ta
java·大数据·数据库