restframewor
restframework是django對(duì)restful架構(gòu)擴(kuò)展的第三方庫(kù)
restful架構(gòu)
主要原則
- 網(wǎng)絡(luò)上的所有事物都被抽象成為資源
- 每個(gè)資源都有唯一的資源標(biāo)識(shí)符
- 同一個(gè)資源具有多種表現(xiàn)形式(xml, json等)
- 對(duì)資源的各種操作不會(huì)修改資源標(biāo)識(shí)符
- 所有操作均是無(wú)狀態(tài)的
- 符合REST原則的架構(gòu)
什么是restful
對(duì)應(yīng)的中文是rest式的;Restful web service是一種常見(jiàn)的rest的應(yīng)用,是遵守了rest風(fēng)格的web服務(wù),rest式的web服務(wù)是一種ROA(面向資源架構(gòu))
如何使用

image.png
注釋?zhuān)?冪等性:對(duì)同一個(gè)接口的多次訪(fǎng)問(wèn),得到的資源狀態(tài)是相同的。
? 安全性:對(duì)該REST 接口訪(fǎng)問(wèn),不會(huì)使服務(wù)端資源狀態(tài)發(fā)生改變
實(shí)例
首先在Django項(xiàng)目的虛擬環(huán)境下安裝djangorestframework
pip install djangorestframework==3.4.6
pip install django-filter
配置如下:
1.在setting.py的INSTALLED_APPS = []中添加rest_framework',
]
INSTALLED_APPS = [
'rest_framework',
]
2.應(yīng)用app:
1)urls.py
from rest_framework.routers import SimpleRouter
from app import views
# 引入路由
router = SimpleRouter()
# 使用router注冊(cè)的地址
router.register(r'student', views.StudentsViews)
urlpatterns = [
]
urlpatterns += router.urls
2)建立模型,models.py
(因?yàn)檫@個(gè)模型是前面創(chuàng)建的,數(shù)據(jù)庫(kù)里面已經(jīng)有數(shù)據(jù)了,所以,看看數(shù)據(jù)結(jié)構(gòu)就可以了)
from django.db import models
class StudentInfo(models.Model):
phone = models.CharField(max_length=11, null=True, unique=True, verbose_name='電話(huà)號(hào)碼')
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='班級(jí)')
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='創(chuàng)建時(shí)間')
operate_time = models.DateTimeField(auto_now_add=True, verbose_name='修改時(shí)間')
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) # 一對(duì)多,多的一方定義g = models.ForeignKey(Grade, null=True) 一的模型在上面
c = models.ManyToManyField(Course, null=True)
class Meta:
db_table = 'app_student'
3) 寫(xiě)一個(gè)實(shí)例化序列的中間件serializers,serializers只做一件事,json化model對(duì)象
a. 在app應(yīng)用中創(chuàng)建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):
# 返回?cái)?shù)據(jù)
queryset = Student.objects.all()
# 序列化結(jié)果
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):
# 返回?cái)?shù)據(jù)
queryset = Student.objects.all()
# 序列化結(jié)果
serializer_class = StudentSerializer
Postman
Postman是一種網(wǎng)頁(yè)調(diào)試與發(fā)送網(wǎng)頁(yè)http請(qǐng)求的chrome插件。我們可以用來(lái)很方便的模擬get或者post或者其他方式的請(qǐng)求來(lái)調(diào)試接口。
下載安裝后,進(jìn)入界面輸入我們創(chuàng)建的接口
a.獲取并查看數(shù)據(jù) GET

image.png
b.刪除數(shù)據(jù) DELETE(輸入接口后面好藥加上id)

image.png
c.添加數(shù)據(jù) POST

image.png
功能概括

image.png
GET 查看
POST 創(chuàng)建/添加數(shù)據(jù)
PUT、PATCH 修改
DELETE 刪除