后端drf开发

前后端开发模式

        目前前后端分离越来越流行,这种模式使开发分工更加明确术业有专攻能更好的完成自己所开发的需求让我们看看前后端具体分别干了什么事:

前后端分离优缺点

优点:

        \bullet 为优质产品打造精益团队

        \bullet 提升开发效率

        \bullet 专业的前端能够完成复杂多变的前端需求

        \bullet 代码维护性强

缺点:

        \bullet 增加了大量的沟通成本,调试成本

        \bullet 前后端开发进度相互影响大大降低了开发效率

API接口

什么是API接口

        APL(Application Programming Interface),就是应用程序接口在项目开发中是必要的组成部分之一,当前后端在联动调试的时候需要通过接口来请求数据与响应数据从而形成一个完整的程序

API接口的用法

url:返回数据的url

        http://127.0.0.1:8000/api/v1/login

请求方式:get、post、patch、delete

请求参数:json或xml格式的key-value类型数据

响应结果:
    返回json或xml格式的key-value类型数据

接口测试工具postman

        API接口写好后后端人员要先自己测试但是还不能通过浏览器来测试所以需要借助到一些接口测试的工具:postman、postwoman

接口测试工具其本质就是模拟客户端发送http请求 

postman官方下载:Download Postman | Get Started for Free

1.postman界面

 2.数据格式

restful规范

什么是restful规范

        REST全称(Representional State Transfer),中文意思是表述:表征性状态转移首次出现在2000年  Roy Fielding 的博士论文中,REST与技术无关代表的是一种软件架构风格,尤其适用于前后端分离的应用模式中

restful规范10点

        \bullet  APL与用户的通信协议,总是使用 HTTPS协议

                https:http+ssl/tsl

        \bullet  接口中带api关键字

                http://127.0.0.1:8000/api/v1/register

        \bullet  多数据版本共存,一个接口可能有多个版本链接中带版本标识

                http://127.0.0.1:8000/api/v1/register  ----> v1

        \bullet  数据即资源均使用名词(可用复数) 接口尽量使用名词

                使用名词后无法区分增、删、改、查

        \bullet  资源操作由请求方式决定

                获取数据:get请求

                新增数据:post请求

                删除数据:delete请求

                修改数据:put、path请求

                请求地址一样通过不同的请求方式决定对资源进行什么操作

        \bullet  url地址中带过滤器

                获取所有的书籍数据 

                http://127.0.0.1:8000/api/v1/book

                获取科技类的书籍

                http://127.0.0.1:8000/api/v1/book?type=科技类

        \bullet  响应带状态码

                1xx:表示请求正在处理一般看不到

                2xx:表示请求处理成功

                        200与201的区别:200表示请求已成功,202表示请求成功并且服务器创建了新的资源

                3xx:网页重定向

                        302与301的区别:302临时重定向到不同的URL响应请求,301则是永久重定向到不同的地址

                4xx:客户端错误

                        403与404的区别:403服务器拒绝请求,404请求的数据在服务器上未找到

                5xx:服务端内部错误

                        503:当前服务端无法使用

                        505:服务器不支持请求中使用的HTTP协议版本

        ps:一般公司有自己的规范在响应体中写状态码  {code:100}

        \bullet  在响应体中带错误信息返回错误信息

                {code:100}

        \bullet  返回结果针对不同的操作,服务器向用户返回的结果要符合下面规范

                GET /collection:返回资源对象的列表        (数组)[{},{}]

                GET /collection/resource:返回单个资源对象       {}

                POST /collection:返回新生成单资源对象        {}

                PUT /collection/resource:返回完整的资源对象  {}

                PATCH /collection/resource:返回完整的资源对象  {}

                DELETE /collection/resource:返回一个空文档                 

        \bullet  响应中带链接

                响应返回数据中也可能带有图片等地址链接

序列化和反序列化

        在API接口开发中最核心最常见的一个过程就是序列化所谓序列化就是把数据转换成不同的数据格式:

\bullet  序列化:把我们能识别的数据转换成指定的数据格式传输给别人

        我们在django中获取的数据默认是模型对象(queryset),但是模型对象数据无法直接提供给前端或别的平台使用,所以我们需要把数据序列化成能够识别的json数据提供给前端

\bullet  反序列化:把别人提供的数据转换成我们需要的格式

        django序列化好的json数据传输过来在前端反序列成自己可以识别的数据

ps:各个语言间的数据无法直接传输需要借助json这种通用的数据格式来进行传输当然序列化格式不只有json格式还有XML等

djangorestframework快速使用

什么是drf

        djangorestframework简称(drf),drf框架是基于Django框架,用于快速构建Web RESTful API的工具提供了定义序列化器Serializer的方法,可以快速根据Django ORM 或者其他库自动序列化、反序列化

        使用dif前得先安装模块:pip install djangorestframework

\bullet  五个接口获取数据

        get:获取所有/通过筛选器可以获取单个

        post:新增一个

        put/path:修改一条

        delete:删除一条

drf使用方式

例如:创建书籍表通过drf框架来写获取表中信息借口

'''models.py文件 定义书籍表'''
from django.db import models

class Book(models.Model):
    name = models.CharField(max_length=32)
    price = models.CharField(max_length=32)
    publish = models.CharField(max_length=32)
'''urls.py文件'''

from django.contrib import admin
from django.urls import path
from rest_framework.routers import SimpleRouter
from app01 import views

router = SimpleRouter()
router.register('books', views.BookView)
urlpatterns = [
    path('admin/', admin.site.urls),
]
urlpatterns += router.urls
'''views.py 文件中'''
from .models import Book
from rest_framework.viewsets import ModelViewSet
from .serializer import BookSerializer

class BookView(ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer
'''新建一个serializer.py '''
from rest_framework import serializers
from .models import Book

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = '__all__'

ps:创建完后通过postman测试接口获取数据

CBV源码分析

提前准备:

'''在视图层中写好cbv'''
from django.views import View

class TestView(View):
    def get(self,request):
        return HttpResponse('get')

    def post(self,request):
        return HttpResponse('post')

'''在路由层中调用'''
path('test/',views.TestView.as_view())

通过路由可以看出与FBV多了一个as_view()方法所以我们需要研究的也是这个方法

 

 ps:最后的结果就是get(request)而我们在CBV类中也定义好了get方法所以会自动运行get

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值