drf源码解析(一)

本博客默认读者有过django学习基础,了解django基本运行方式。

1,什么是drf

django restframework框架 是在django的基础上又给我们提供了很多方便的功能,让我们可以更便捷基于django开发restful API,来一个简单的实例。

那么什么又是restful呢?

REST:英文representational state transfer直译为表现层状态转移,或者表述性状态转移;Rest是web服务的一种架构风格,一种设计风格,是一种思想;同时Rest不是针对某一种编程语言的。

为什么需要restful?

  • URL具有很强可读性的,具有自描述性
  • 规范化请求过程和返回结果

话说回来,drf又有哪些优势呢,下面我引用了官网的说法

  • 提供了可视化的API调试界面,开发者可以在线测试接口
  • 提供了各种开箱即用的API认证授权工具,如OAuth2
  • 提供了orm数据序和非orm数据的序列化支持
  • 支持函数视图
  • 大量的文档和社区支持

2,如何创建纯净版drf项目

2.1创建django项目

首先当然是安装django和rest_framework

pip install django==3.2
pip install djangorestframework

首先我们得创建一个django项目,pycharm的专业版中可以直接创建django,或者你也可以通过命令行来创建,如:

django-admin startproject test01

当然,如果你没有将django-admin加入到系统环境变量中,那么在命令行中得带上你django-admin的路径,如:

C:\Users\123\AppData\Local\Programs\Python\Python311\Scripts\django-admin.exe startproject test01

创建好项目后我们得创建一个app,在项目中运行命令

python manage.py startapp  app01

值得一提的是,pycharm为我们提供了manage工具,这让我们以后在执行manage命令时,不需要再加上"python manage.py"

drf源码解析(一)_第1张图片

上面的命令就可以直接变为

startapp app01

2.2核心配置

在项目的settings.py中,找到并修改以下代码:

(1)INSTALLED_APPS中注释掉前四个,在里面对建立的app01进行注册,然后在最后加上’rest_framework’

drf源码解析(一)_第2张图片

INSTALLED_APPS = [
    # 'django.contrib.admin',
    # 'django.contrib.auth',
    # 'django.contrib.contenttypes',
    # 'django.contrib.sessions',
    # 'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01.apps.App01Config',
    "rest_framework",
]

(2)注释掉MIDDLEWARE的部分组件

drf源码解析(一)_第3张图片

(3)在TEMPLATES中:

drf源码解析(一)_第4张图片

(4)最后还需要加上一句

drf源码解析(一)_第5张图片

REST_FRAMEWORK = {
    "UNAUTHENTICATED_USER": None
}

如果你希望drf的默认返回响应是中文的话,建议把‘LANGUAGE_CODE’改为‘zh-hans’

LANGUAGE_CODE = 'zh-hans'

3,什么是CBV和FBV

3.1FBV(function base views)

FBV(function base views),就是编写函数来处理业务请求,相当于面向过程的编程方法。

例如在urls.py中,FBV方法会这样写:

from django.urls import path
from app01 import views
urlpatterns = [
    path('users/', views.users),
]

在views.py我们来实现这个视图函数

from rest_framework.response import Response

def users(request,*args, **kwargs):
    if request.method == "GET":
        return Response({"code":1000,"data":"xxx"})
    elif request.method == 'POST':
        return Response({"code":1000,"data":"xxx"})
    ...

3.2CBV(class base views)

CBV(class base views),就是编写类来处理业务请求,相当于面向对象的编程方法。

例如在urls.py中,CBV方法会这样写:

from django.urls import path
from app01 import views
urlpatterns = [
    path('users/', views.UserView.as_view()),
]

在views.py中:

from rest_framework.response import Response
from rest_framework.views import APIView

class UserView(APIView):
    def get(self, request, *args, **kwargs):
        return Response({"code": 1000, "data": "xxx"})

    def post(self, request, *args, **kwargs):
        return Response({"code": 1000, "data": "xxx"})

drf为我们提供了Response用来返回响应,同时在使用CBV方法时,每一个类都应该继承APIView这个类。

注意:drf支持cbv和fbv,只不过基于drf在进行api开发时,一般都是使用cbv的形式。

你可能感兴趣的:(python之路,django,python)