django框架前后端分离CBV模式后端API开发

请求处理方式 FBV

刚开始学习django,从前后端不分离入手,FBV(function base views) 就是在视图里使用函数处理请求。

使用FBV的index页面实现示例代码

urls.py

from django.urls import path
from . import views
urlpatterns = [
    path('', views.index, name="index"),
]

views.py

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页面实现示例代码

urls.py

from django.urls import path
from django.views import View
from . import views
app_name = 'yyyy'
urlpatterns = [
    path('index/', views.IndexView.as_view())  
]

views.py

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的注意事项

注意:

  1. cbv定义类的时候必须要继承django.views的View
  2. 在写url的时候必须要加as_view()
  3. 类里面使用form表单提交的话只有GET和POST方法
  4. 类里面使用ajax发送数据的话支持定义以下很多方法,常用请求方式的restful 规范:
      ‘GET’ 获取数据,
      ‘POST’ 创建新数据,
       ‘PUT’ 更新
       ‘PATCH’ 局部更新
       ‘DELETE’ 删除
  5. 在发送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,逻辑更加清晰,后期也更好维护哟。

上一篇: Django2+MySQL5.7 创建第一个简单的app项目

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值