rest

restframewor

restframework是django对restful架构扩展的第三方库

restful架构

主要原则

  • 网络上的所有事物都被抽象成为资源
  • 每个资源都有唯一的资源标识符
  • 同一个资源具有多种表现形式(xml, json等)
  • 对资源的各种操作不会修改资源标识符
  • 所有操作均是无状态的
  • 符合REST原则的架构

什么是restful

对应的中文是rest式的;Restful web service是一种常见的rest的应用,是遵守了rest风格的web服务,rest式的web服务是一种ROA(面向资源架构)

如何使用


rest_第1张图片
image.png

注释: 幂等性:对同一个接口的多次访问,得到的资源状态是相同的。

​ 安全性:对该REST 接口访问,不会使服务端资源状态发生改变

实例

首先在Django项目的虚拟环境下安装djangorestframework

pip install djangorestframework==3.4.6

pip install django-filter

配置如下:

1.在setting.py的INSTALLED_APPS = []中添加rest_framework',

]

INSTALLED_APPS = [
'rest_framework',
]
2.应用app:
1)urls.py
from rest_framework.routers import SimpleRouter
from app import views


# 引入路由
router = SimpleRouter()
# 使用router注册的地址
router.register(r'student', views.StudentsViews)

urlpatterns = [

]
urlpatterns += router.urls
2)建立模型,models.py

(因为这个模型是前面创建的,数据库里面已经有数据了,所以,看看数据结构就可以了)

from django.db import models


class StudentInfo(models.Model):
    phone = models.CharField(max_length=11, null=True, unique=True, verbose_name='电话号码')
    address = models.CharField(max_length=50, null=True, verbose_name='地址')

    class Meta:
        db_table = 'studentInfo'


class Grade(models.Model):
    g_name = models.CharField(max_length=10, unique=True, verbose_name='班级')

    class Meta:
        db_table = 'grade'


class Course(models.Model):
    c_name = models.CharField(max_length=10, null=True)

    class Meta:
        db_table = 'course'


class Student(models.Model):
    s_name = models.CharField(max_length=10, unique=True, verbose_name='姓名')
    s_age = models.IntegerField(default=19, verbose_name='年龄')
    s_sex = models.BooleanField(default=1, verbose_name='性别')
    create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    operate_time = models.DateTimeField(auto_now_add=True, verbose_name='修改时间')
    math = models.DecimalField(max_digits=4, decimal_places=2, null=True)
    chinese = models.DecimalField(max_digits=4, decimal_places=2, null=True)
    stu_info = models.OneToOneField(StudentInfo, null=True, related_name='stu')
    g = models.ForeignKey(Grade, null=True)  # 一对多,多的一方定义g = models.ForeignKey(Grade, null=True) 一的模型在上面
    c = models.ManyToManyField(Course, null=True)

    class Meta:
        db_table = 'app_student'
3) 写一个实例化序列的中间件serializers,serializers只做一件事,json化model对象

a. 在app应用中创建serializers.py文件
b. serializers.py

from rest_framework import viewsets, mixins

from app.models import Student
from app.serializers import StudentSerializer


class StudentsViews(mixins.ListModelMixin,
                    mixins.CreateModelMixin,
                    mixins.DestroyModelMixin,
                    mixins.UpdateModelMixin,
                    viewsets.GenericViewSet):

    # 返回数据
    queryset = Student.objects.all()
    # 序列化结果
    serializer_class = StudentSerializerfrom rest_framework import serializers

from app.models import Student


class StudentSerializer(serializers.ModelSerializer):
    class Meta:
        # 指定序列化的模型
        model = Student
        # 指定序列化那些字段
        fields = ['id', 's_name']

c.views.py

from rest_framework import viewsets, mixins

from app.models import Student
from app.serializers import StudentSerializer


class StudentsViews(mixins.ListModelMixin,
                    mixins.CreateModelMixin,
                    mixins.DestroyModelMixin,
                    mixins.UpdateModelMixin,
                    viewsets.GenericViewSet):

    # 返回数据
    queryset = Student.objects.all()
    # 序列化结果
    serializer_class = StudentSerializer

Postman

Postman是一种网页调试与发送网页http请求的chrome插件。我们可以用来很方便的模拟get或者post或者其他方式的请求来调试接口。
下载安装后,进入界面输入我们创建的接口
a.获取并查看数据 GET
rest_第2张图片
image.png
b.删除数据 DELETE(输入接口后面好药加上id)
rest_第3张图片
image.png
c.添加数据 POST
rest_第4张图片
image.png
功能概括
rest_第5张图片
image.png

GET 查看
POST 创建/添加数据
PUT、PATCH 修改
DELETE 删除

你可能感兴趣的:(rest)