本博客默认读者有过django学习基础,了解django基本运行方式。
django restframework框架 是在django的基础上又给我们提供了很多方便的功能,让我们可以更便捷基于django开发restful API,来一个简单的实例。
那么什么又是restful呢?
REST:英文representational state transfer直译为表现层状态转移,或者表述性状态转移;Rest是web服务的一种架构风格,一种设计风格,是一种思想;同时Rest不是针对某一种编程语言的。
为什么需要restful?
话说回来,drf又有哪些优势呢,下面我引用了官网的说法
首先当然是安装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
在项目的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'
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"})
...
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的形式。