1.REST介绍

  REST与技术无关,它代表的是一种软件架构风格,全称Representational State Transfer,中文翻译为“表征状态转移”

  REST从资源的角度类审视整个网络,它将分布在网络中某个节点的资源通过URL进行标识,客户端应用通过URL来获取资源的表征,获得这些表征致使这些应用转变状态

1.1.RESTful API设计

  当前发展前端设备(手机,电脑,平板灯)层出不穷,而后端不会说随着前端的改变而去改变自身,去对应每一个进行通信,因此我们提出来一个统一接口进行调度,才有了API的概念,RESTful API是目前比较成熟的一套互联网应用程序的API设计理论。

  同一套API接口,能使用多次

  API:即所谓的接口,URL

restful规范:

  1.API与用户的通信协议,总是使用HTTPs协议。

  2.在自己写的URL中体现自己写的是API,将API部署在专有域名下

  3.在url中体现版本共存(旧版本和新版本都能体现出)

  4.路径,视网络上任何东西都是资源,均使用名词表示(可复数)

    https://api.example.com/v1/animals

    https://api.example.com/v1/employees

  5. 方法

    -get,从服务器获取资源
    -post,新建资源
    -put,更新资源
    -patch,局部更新
    -delete,删除

  6.分页

    https://api.example.com/v1/zoos?limit=10:指定返回记录的数量

  7.状态码

  8.错误信息

  9.返回信息(尽量使用Json格式,避免使用xml)

  10.超链接

    即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么

1.2 django restframework生命周期

  发送请求-->Django的wsgi-->中间件-->路由系统_执行CBV的as_view(),就是执行内部的dispath方法-->在dispath内,对request封装-->版本-->认证-->权限-->限流-->视图-->如果视图用到缓存( request.data or request.query_params )就用到了 解析器-->视图处理数据,用到了序列化(对数据进行序列化或验证) -->视图返回数据可以用到分页

2.基于django实现API 

  基于django实现的API许多功能都需要我们自己开发,这时候django restframework就给我们提供了方便,直接基于它来返回数据,总之原理都是一样的,就是给一个接口,让前端的人去请求这个url获取数据,在页面上显示出来。这样就达到了前后端分离的效果

2.1实现流程

  使用Django REST Framework 框架的序列化工具类

  1.安装(注意路径,我是在虚拟环境路径下,安装时候的切到该路径):

pip install djangorestframework

  2.导入(serializers/串行)

from rest_framework import serializers

  3.使用

class ArticleSerializer(serializers.Serializer):
    ... 

2.2.给前端传值的几种操作

django下创建模型,这里以这三张表来举例:

models.py

class Article(models.Model):
    title = models.CharField(max_length=32)
    # auto_now_add 第一次创建的时候把当前时间保存
    create_time = models.DateField(auto_now_add=True)
    # auto_now每次更新的时候会把当前时间保存
    update_time = models.DateField(auto_now=True)
    # 后期获取这两个值,通过obj.get_type_display()
    type = models.SmallIntegerField(
        choices=((1,"原创"),(2,"转载")),
        default=1
        )
    school = models.ForeignKey(to="School",on_delete=models.CASCADE)
    tag = models.ManyToManyField(to="Tag")


class School(models.Model):
    name = models.CharField(max_length=32)


class Tag(models.Model):
    name = models.CharField(max_length=32)
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-01
  • 2021-11-04
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-09-26
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-05
  • 2021-05-31
相关资源
相似解决方案