本博客默认读者有过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"
上面的命令就可以直接变为
startapp app01
2.2核心配置
在项目的settings.py中,找到并修改以下代码:
(1)INSTALLED_APPS中注释掉前四个,在里面对建立的app01进行注册,然后在最后加上’rest_framework’
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的部分组件
(3)在TEMPLATES中:
(4)最后还需要加上一句
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的形式。