restframewor
restframework是django对restful架构扩展的第三方库
restful架构
主要原则
- 网络上的所有事物都被抽象成为资源
- 每个资源都有唯一的资源标识符
- 同一个资源具有多种表现形式(xml, json等)
- 对资源的各种操作不会修改资源标识符
- 所有操作均是无状态的
- 符合REST原则的架构
什么是restful
对应的中文是rest式的;Restful web service是一种常见的rest的应用,是遵守了rest风格的web服务,rest式的web服务是一种ROA(面向资源架构)
如何使用
注释: 幂等性:对同一个接口的多次访问,得到的资源状态是相同的。
安全性:对该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
b.删除数据 DELETE(输入接口后面好药加上id)
c.添加数据 POST
功能概括
GET 查看
POST 创建/添加数据
PUT、PATCH 修改
DELETE 删除