django restful API

摘要

什么是rest:REST是所有Web應用都應該遵守的架構設計指導原則
rest設計有點: 1.客戶端-服務端分離 2..無狀態(tài)(Stateless):從客戶端的每個請求要包含服務器所需要的所有信息 3.緩存(Cachable):服務器返回信息必須被標記是否可以緩存,如果緩存永部,客戶端可能會重用之前的信息發(fā)送請求 4.統(tǒng)一接口優(yōu)點:提高交互的可見性黄橘,鼓勵單獨改善組件 5.支持按需代碼(Code-On-Demand 可選)
REST是面向資源進行的,而資源是通過URI進行暴露的悼沈。
REST同一個資源的一組不同的操作

1.django restful流程

models ----> Serialiers --->viewsets ---->routers --->urls ---->filters

2.配置settings.py文件

(1)INSTALLED_APPS 追加 rest_freamwork


image.png

(2)配置restful API的返回結果

REST_FRAMEWORK = {
    # 分頁
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 2,

    # 設置搜索---將版本換為3.4.6
    'DEFAULT_FILTER_BACKENDS': ('rest_framework.filters.DjangoFilterBackend',
                               'rest_framework.filters.SearchFilter'),

    # 返回結構自定義
    'DEFAULT_RENDERER_CLASSES': (
        'utils.RenderResponse.CustomJsonRenderer',
    )
}

3.配置應用文件urls.py贱迟,設置路由

from rest_framework.routers import SimpleRouter
from django.conf.urls import url

router = SimpleRouter()
router.register(r'student', views.Studentsedit)
urlpatterns += router.urls

4.views.py文件中配置相關方法 ,實現(xiàn)CRUD

這里的方法要使用class

from rest_framework import mixins, viewsets
from stu.serializers import StudentSerializer
from rest_framework.response import Response
from stu.filters import StuFilter

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

    # 查詢所有信息
    queryset = Student.objects.all()
    # 序列化
    serializer_class = StudentSerializer

    # 過濾
    filter_class = StuFilter

    # 重定義獲得  刪除后篩選出刪除狀態(tài)為0的,并且對其從大到小進行排序
    def get_queryset(self):
        query = self.queryset
        return query.filter(s_delete=0).order_by('-id')

    # 重定義刪除  實現(xiàn)軟刪除  使數(shù)據(jù)庫中的刪除狀態(tài)轉變絮供, 實際上數(shù)據(jù)依然留在數(shù)據(jù)庫中
    def destroy(self, request, *args, **kwargs):
        instance = self.get_object()
        instance.s_delete = 1
        instance.save()
        return Response({'msg': '刪除成功', 'code': 200})

5.應用文件下新建過濾filters.py 和 序列化 serializers.py文件

(1)序列化 serializers
序列化的數(shù)據(jù)是json格式

from rest_framework import serializers
from stu.models import Student


class StudentSerializer(serializers.ModelSerializer):
# 重定義錯誤信息返回名
    s_name = serializers.CharField(error_messages={
        'blank': '用戶名不能為空',
        'max_length': '用戶名不能超過10個字符串'
    }, max_length=10)

    s_tel = serializers.CharField(error_messages={
        'blank': '電話號碼不能為空'
    })

# 傳遞的字段
    class Meta:
        model = Student
        fields = ['id', 's_name', 's_tel', 's_yuwen', 's_status', 's_operate_time']

# 顯示實例的關聯(lián)的地址
    def to_representation(self, instance):

        data = super().to_representation(instance)
        try:
            data['s_addr'] = instance.studentinfo.i_addr
        except Exception as e:
            data['s_addr'] = ''
        data['s_status'] = dict(Student.STATUS)[data['s_status']]

        return data

(2)定義過濾

import django_filters
from rest_framework import filters
from stu.models import Student


class StuFilter(filters.FilterSet):

    name = django_filters.CharFilter('s_name', lookup_expr='icontains')
    tel = django_filters.CharFilter('s_tel')
    status = django_filters.CharFilter('s_status')
    operate_time_min = django_filters.DateTimeFilter('s_operate_time', lookup_expr='gte')
    operate_time_max = django_filters.DateTimeFilter('s_operate_time', lookup_expr='lte')
    yuwen_min = django_filters.NumberFilter('s_yuwen', lookup_expr='gte')
    yuwen_max = django_filters.NumberFilter('s_yuwen', lookup_expr='lte')


    class Meta:
        model = Student
        fields = ['s_name', 's_tel', 's_yuwen', 's_status', 's_operate_time']

6.查詢

可以通過網(wǎng)頁直接查詢衣吠, 也可以通過postman軟件來進行操作

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市壤靶,隨后出現(xiàn)的幾起案子缚俏,更是在濱河造成了極大的恐慌,老刑警劉巖贮乳,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忧换,死亡現(xiàn)場離奇詭異,居然都是意外死亡向拆,警方通過查閱死者的電腦和手機亚茬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浓恳,“玉大人刹缝,你說我怎么就攤上這事【苯” “怎么了梢夯?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長晴圾。 經常有香客問我颂砸,道長,這世上最難降的妖魔是什么疑务? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任沾凄,我火速辦了婚禮,結果婚禮上知允,老公的妹妹穿的比我還像新娘撒蟀。我一直安慰自己,他們只是感情好温鸽,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布保屯。 她就那樣靜靜地躺著手负,像睡著了一般。 火紅的嫁衣襯著肌膚如雪姑尺。 梳的紋絲不亂的頭發(fā)上竟终,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機與錄音切蟋,去河邊找鬼统捶。 笑死,一個胖子當著我的面吹牛柄粹,可吹牛的內容都是我干的喘鸟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼驻右,長吁一口氣:“原來是場噩夢啊……” “哼什黑!你這毒婦竟也來了?” 一聲冷哼從身側響起堪夭,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤愕把,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后森爽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恨豁,經...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年爬迟,在試婚紗的時候發(fā)現(xiàn)自己被綠了圣絮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡雕旨,死狀恐怖,靈堂內的尸體忽然破棺而出捧请,到底是詐尸還是另有隱情凡涩,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布疹蛉,位于F島的核電站活箕,受9級特大地震影響,放射性物質發(fā)生泄漏可款。R本人自食惡果不足惜育韩,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望闺鲸。 院中可真熱鬧筋讨,春花似錦、人聲如沸摸恍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至壁袄,卻和暖如春类早,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嗜逻。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工涩僻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人栈顷。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓逆日,卻偏偏與公主長得像,于是被迫代替她去往敵國和親妨蛹。 傳聞我的和親對象是個殘疾皇子屏富,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內容