django框架前后端分离CBV模式后端API开发
请求处理方式 FBV
刚开始学习django,从前后端不分离入手,FBV(function base views) 就是在视图里使用函数处理请求。
使用FBV的index页面实现示例代码
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name="index"),
]
from django.http import HttpResponse
def index(request):
if request.method == "GET":
return HttpResponse("Hello world! This is get.")
if request.method == "POST":
return HttpResponse("Hello world! This is post.")
if request.method == "PUT":
return HttpResponse("Hello world! This is put.")
if request.method == "DELETE":
return HttpResponse("Hello world! This is delete.")
由于python函数只能用if语句来判断请求方式,当有GET、POST、PUT、DELETE…等等多种请求方式时,python的优势就被埋没了,且不方便维护。
请求处理方式 CBV
CBV(class base views) 就是在视图里使用类处理请求。
Python是一个面向对象的编程语言,如果只用函数来开发,有很多面向对象的优点就错失了(继承、封装、多态)。所以Django在后来加入了Class-Based-View。可以让我们用类写View。这样做的优点主要下面两种:
1.提高了代码的复用性,可以使用面向对象的技术,比如Mixin(多继承)
2.可以用不同的函数针对不同的HTTP方法处理,而不是通过很多if判断,提高代码可读性
使用FBV的index页面实现示例代码
from django.urls import path
from django.views import View
from . import views
app_name = 'yyyy'
urlpatterns = [
path('index/', views.IndexView.as_view())
]
from django.http import HttpResponse
from django.views import View
import json
class IndexView(View):
def get(self, request, *args, **kwargs):
return HttpResponse("Hello world! This is get.")
#当接收到post请求时返回json数据
def post(self, request, *args, **kwargs):
user_json = {
'code' : 1000, #code是与前端约定的标识,确定数据的处理方法
'username' : 'itang85',
'password' : '123456',
}
return HttpResponse(json.dumps(user_json))
def put(self, request, *args, **kwargs):
return HttpResponse("Hello world! This is put.")
def delete(self, request, *args, **kwargs):
return HttpResponse("Hello world! This is delete.")
当浏览器向后端发送请求时,django自动会根据request.method来运行对应的函数,代码运行流程的理解可以仔细阅读(from django.views import View)View类的dispatch方法。如有不清楚可以在下方评论区评论提问哟!
此时的API(即前端ajax传输数据的url)为
API: http://127.0.0.1:8000/index/
使用CBV的注意事项
注意:
- cbv定义类的时候必须要继承django.views的View
- 在写url的时候必须要加as_view()
- 类里面使用form表单提交的话只有GET和POST方法
- 类里面使用ajax发送数据的话支持定义以下很多方法,常用请求方式的restful 规范:
‘GET’ 获取数据,
‘POST’ 创建新数据,
‘PUT’ 更新
‘PATCH’ 局部更新
‘DELETE’ 删除 - 在发送post请求时记得要把 setting.py 里面的csrf中间件注释掉,否则post是不能成功的。另外补充一点csrf中间件工作在views视图层!!!
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
#'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
接口测试软件推荐 postman
postman是十分好用的软件,可发送各种方式的请求给后端api,做前后端分离开发时必不可少的测试软件。百度搜索官网即可下载,安装可用!
总结
无论是FBV还是CBV都可以实现请求处理的所有功能,只是CBV更好的利用了python面向对象的能力。实际开发时也可以根据个人的喜好来做选择,小唐推荐大家使用CBV,逻辑更加清晰,后期也更好维护哟。