rest

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 刪除

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容