您的位置:首页 > 编程语言 > Go语言

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

2019-07-13 23:24 288 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_43517336/article/details/95798365

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

  • 请求处理方式 CBV
  • 使用CBV的注意事项
  • 接口测试软件推荐 postman
  • 总结
  • 请求处理方式 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项目

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: