久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Python每日一練:RESTfuI架構(gòu)和DRF入門

 只怕想不到 2025-01-21

RESTful架構(gòu),,即表現(xiàn)層狀態(tài)轉(zhuǎn)移(Representational State Transfer),是一種軟件架構(gòu)風(fēng)格,,主要用于設(shè)計(jì)網(wǎng)絡(luò)應(yīng)用程序,。它通過HTTP協(xié)議定義了客戶端與服務(wù)器之間的通信方式,強(qiáng)調(diào)簡潔,、可擴(kuò)展和高性能,。RESTful架構(gòu)以其簡潔的設(shè)計(jì)和明確的接口規(guī)范,成為現(xiàn)代Web開發(fā)的首選方法之一,。

應(yīng)用場(chǎng)景

RESTful架構(gòu)廣泛應(yīng)用于各種網(wǎng)絡(luò)應(yīng)用中,,從簡單的網(wǎng)站到復(fù)雜的在線服務(wù)。它被用于構(gòu)建各種規(guī)模的API,,支持不同類型的客戶端,,如網(wǎng)頁瀏覽器、移動(dòng)應(yīng)用和桌面程序,。許多知名的在線服務(wù),,如社交媒體平臺(tái)、電子商務(wù)網(wǎng)站和云服務(wù)提供商,,都采用了RESTful API來提供數(shù)據(jù)和服務(wù),。這種架構(gòu)的靈活性和可擴(kuò)展性使其成為跨平臺(tái)應(yīng)用的理想選擇。

 01  RESTful架構(gòu) 

REST(Representational State Transfer)是一種軟件架構(gòu)風(fēng)格,它定義了客戶端和服務(wù)器之間如何通過HTTP協(xié)議進(jìn)行通信,。RESTful架構(gòu)具有以下特點(diǎn):

    1. 無狀態(tài)
    服務(wù)器不存儲(chǔ)任何客戶端請(qǐng)求的狀態(tài),,每個(gè)請(qǐng)求都包含所有必要的信息。
    代碼樣例:模擬一個(gè)簡單的無狀態(tài)請(qǐng)求
    defstateless_request(user_id, data):
        
    '''
        模擬一個(gè)無狀態(tài)請(qǐng)求,,服務(wù)器不存儲(chǔ)用戶狀態(tài),,每次請(qǐng)求都需提供用戶ID和數(shù)據(jù)。
        '''

        
    # 處理請(qǐng)求,,例如查詢用戶信息
        user_info 
    = get_user_info(user_id)
        
    # 返回響應(yīng)
        
    return{'status':'success','user_info': user_info}

    2. 統(tǒng)一接口
    使用標(biāo)準(zhǔn)的HTTP方法(如GET,、POST、PUT,、DELETE)來操作資源,。
    代碼樣例:定義一個(gè)資源的操作接口
    classResourceAPI:
        
    '''
        定義一個(gè)資源的操作接口,使用標(biāo)準(zhǔn)HTTP方法,。
        '''

        
    defget(self, resource_id):
            
    '''
            GET方法:獲取資源信息,。
            '''

            
    # 獲取資源
            resource 
    = get_resource(resource_id)
            
    return resource

        
    defpost(self, data):
            
    '''
            POST方法:創(chuàng)建新資源。
            '''

            
    # 創(chuàng)建資源
            new_resource 
    = create_resource(data)
            
    return new_resource

        
    defput(self, resource_id, data):
            
    '''
            PUT方法:更新資源信息,。
            '''

            
    # 更新資源
            update_resource
    (resource_id, data)
            
    return{'status':'updated'}

        
    defdelete(self, resource_id):
            
    '''
            DELETE方法:刪除資源,。
            '''

            
    # 刪除資源
            delete_resource
    (resource_id)
            
    return{'status':'deleted'}

    3. 資源標(biāo)識(shí)
    每個(gè)資源都有一個(gè)唯一的URI(統(tǒng)一資源標(biāo)識(shí)符)。
    代碼樣例:定義資源的URI
    defget_resource_uri(resource_id):
        
    '''
        根據(jù)資源ID生成資源的URI,。
        '''

        
    # 生成URI
        uri 
    =f'/api/resources/{resource_id}'
        
    return uri

    4. 表現(xiàn)層與數(shù)據(jù)層分離
    客戶端通過請(qǐng)求資源的表現(xiàn)形式(如JSON,、XML)來獲取數(shù)據(jù)。
    代碼樣例:返回資源的不同表現(xiàn)形式
    defget_resource_representation(resource, format_type):
        
    '''
        根據(jù)請(qǐng)求的表現(xiàn)形式(JSON或XML)返回資源數(shù)據(jù),。
        '''

        
    if format_type =='json':
            
    # 返回JSON格式的資源數(shù)據(jù)
            
    return json.dumps(resource)
        
    elif format_type =='xml':
            
    # 返回XML格式的資源數(shù)據(jù)
            
    return dicttoxml(resource)
        
    else:
            
    return'Unsupported format'

    以上代碼樣例展示了RESTful架構(gòu)的各個(gè)特點(diǎn),,幫助理解其在實(shí)際應(yīng)用中的實(shí)現(xiàn)方式。


     02  DRF入門簡介 


    DRF是一個(gè)功能強(qiáng)大的工具包,,用于構(gòu)建Web API,。它是Django的一個(gè)第三方庫,提供了以下優(yōu)勢(shì):
    1. 序列化
    將Django模型轉(zhuǎn)換為JSON,、XML等格式,,方便客戶端解析。
    代碼樣例:定義一個(gè)序列化器
    from rest_framework import serializers
    from.models import MyModel

    classMyModelSerializer(serializers.ModelSerializer):
        
    '''
        將Django模型MyModel轉(zhuǎn)換為JSON,、XML等格式,。
        '''

        
    classMeta:
            model 
    = MyModel
            fields 
    ='__all__'# 序列化所有字段

    2. 視圖和路由
    簡化API視圖的編寫,支持多種視圖類型和自動(dòng)路由,。
    代碼樣例:定義一個(gè)視圖和路由
    from rest_framework import viewsets
    from.models import MyModel
    from.serializers import MyModelSerializer

    classMyModelViewSet(viewsets.ModelViewSet):
        
    '''
        提供對(duì)MyModel的增刪改查操作,。
        '''

        queryset 
    = MyModel.objects.all()
        serializer_class 
    = MyModelSerializer

    # 路由配置(通常在urls.py中定義)
    from rest_framework.routers import DefaultRouter
    from.views import MyModelViewSet

    router 
    = DefaultRouter()
    router
    .register(r'mymodel', MyModelViewSet)
    # 自動(dòng)生成的路由包括:/mymodel/ 和 /mymodel/{id}/

    3. 認(rèn)證和權(quán)限
    提供多種認(rèn)證方式和權(quán)限控制,確保API的安全性,。
    代碼樣例:自定義權(quán)限類
    from rest_framework import permissions

    classIsOwnerOrReadOnly(permissions.BasePermission):
        
    '''
        自定義權(quán)限,,只允許資源所有者編輯,。
        '''

        
    defhas_object_permission(self, request, view, obj):
            
    if request.method in permissions.SAFE_METHODS:
                
    returnTrue
            
    return obj.owner == request.user

    4. 文檔生成
    自動(dòng)生成API文檔,方便開發(fā)者和用戶了解API的使用方法,。
    DRF的自動(dòng)文檔功能不需要額外的代碼樣例,,它會(huì)根據(jù)視圖和序列化器自動(dòng)生成文檔。
    通常在項(xiàng)目的settings
    .py中配置文檔相關(guān)的設(shè)置,,如:
    REST_FRAMEWORK 
    ={
        
    'DEFAULT_SCHEMA_CLASS':'rest_framework.schemas.coreapi.AutoSchema',
    }


    DRF入門示例

    以下是一個(gè)簡單的DRF入門示例,展示如何創(chuàng)建一個(gè)簡單的API來獲取學(xué)科信息:

    安裝Django REST Framework

    在終端中運(yùn)行以下命令來安裝DRF:

    pip install djangorestframework

    定義模型

    在Django應(yīng)用的models.py文件中定義學(xué)科模型:

    from django.db import models

    class Subject(models.Model):
        name 
    = models.CharField(max_length=100)
        description 
    = models.TextField()

        
    def __str__(self):
            
    return self.name

    創(chuàng)建序列化器

    在應(yīng)用的serializers.py文件中創(chuàng)建序列化器:

    from rest_framework import serializers
    from .models import Subject

    class SubjectSerializer(serializers.ModelSerializer):
        
    class Meta:
            model 
    = Subject
            fields 
    = ['id', 'name', 'description']

    創(chuàng)建視圖

    在應(yīng)用的views.py文件中創(chuàng)建視圖集:

    from rest_framework import viewsets
    from .models import Subject
    from .serializers import SubjectSerializer

    class SubjectViewSet(viewsets.ModelViewSet):
        queryset 
    = Subject.objects.all()
        serializer_class 
    = SubjectSerializer

    配置路由

    在應(yīng)用的urls.py文件中配置路由:

    from django.urls import path, include
    from rest_framework.routers import DefaultRouter
    from .views import SubjectViewSet

    router 
    = DefaultRouter()
    router
    .register(r'subjects', SubjectViewSet)

    urlpatterns 
    = [
        path
    ('', include(router.urls)),
    ]

    測(cè)試API

    現(xiàn)在,,你可以通過以下HTTP方法來獲取和操作學(xué)科信息:

    • GET請(qǐng)求
      /subjects/將列出所有學(xué)科,。
    • POST請(qǐng)求
      /subjects/將創(chuàng)建一個(gè)新的學(xué)科。
    • GET請(qǐng)求
      /subjects/{id}/將獲取指定ID的學(xué)科詳細(xì)信息,。
    • PUT請(qǐng)求
      /subjects/{id}/將更新指定ID的學(xué)科信息,。
    • DELETE請(qǐng)求
      /subjects/{id}/將刪除指定ID的學(xué)科。

    通過這個(gè)示例,,你可以快速了解如何使用Django REST Framework創(chuàng)建簡單的API,。每個(gè)步驟都清晰地展示了從安裝到測(cè)試的完整流程,幫助你掌握DRF的基本用法,。

    我們創(chuàng)建了一個(gè)簡單的DRF API,,可以使用HTTP方法(如GET、POST)來獲取和操作學(xué)科信息,。DRF的強(qiáng)大功能和簡潔的語法使得構(gòu)建RESTful API變得輕松高效,。

    RESTful架構(gòu)和DRF入門”的綜合案例





     文章聲明 

    本文由python工程師俱樂部獨(dú)家發(fā)布,請(qǐng)?jiān)讷@得賬號(hào)管理員授權(quán)后轉(zhuǎn)載,。


     策劃制作 


    策劃:清風(fēng)    丨   監(jiān)制:明月

    編輯:嘯嘯    丨   圖片來源:稿定設(shè)計(jì)及網(wǎng)絡(luò),,侵刪



        熟悉嘯嘯的小伙伴都知道,只要有空,,我答疑都是免費(fèi)的,,不收任何粉絲的紅包。

    但是,,為了篩選出一批真正想跟嘯嘯學(xué)習(xí)python的粉絲小友,,給你提供一個(gè)干凈高效的python圈子,真正回歸技術(shù)交流,;由資深工程師嘯嘯帶頭發(fā)起[python俱樂部]知識(shí)星球,,面向編程行業(yè)技術(shù)從業(yè)者們。

    與1000+工程師一起分享技術(shù),、經(jīng)驗(yàn),、資源。星球內(nèi)有海量項(xiàng)目案例分享,、大佬實(shí)戰(zhàn)經(jīng)驗(yàn)分享,、1v1有問必答,、運(yùn)維崗位內(nèi)推、還有N多實(shí)用工具和資料干貨,,囊括了各種技術(shù)知識(shí)點(diǎn),,行業(yè)數(shù)據(jù)分析報(bào)告等等。

    如果你對(duì)編程感興趣,,或者正在學(xué)習(xí)編程,,歡迎加入我的編程俱樂部。

    往期內(nèi)容推薦:
    Image

    Python每日一練:中間件的應(yīng)用


    Image

    Python每日一練:前后端分離開發(fā)入門



    下篇開始學(xué)習(xí)RESTfuI架構(gòu)和DRF進(jìn)階,,內(nèi)容如下:

    RESTful架構(gòu)和DRF進(jìn)階

    在現(xiàn)代Web開發(fā)中,,RESTful架構(gòu)已成為構(gòu)建高效、可擴(kuò)展API的首選方法,。它通過定義清晰的資源和統(tǒng)一的接口,,使得客戶端與服務(wù)器之間的通信更加簡潔和直觀。隨著技術(shù)的不斷發(fā)展,,開發(fā)者對(duì)RESTful API的需求也在不斷增長,,這就需要更深入地理解和掌握RESTful架構(gòu)的設(shè)計(jì)原則和最佳實(shí)踐。

    資源設(shè)計(jì)

    深入理解RESTful架構(gòu)中的資源概念是至關(guān)重要的,。資源是RESTful API中的核心,,它們代表了系統(tǒng)中的實(shí)體或數(shù)據(jù)。合理劃分資源邊界,,為每個(gè)資源設(shè)計(jì)合適的URI,,是構(gòu)建RESTful API的基礎(chǔ)。例如,,對(duì)于一個(gè)在線教育平臺(tái),,可以將課程、教師和學(xué)生作為不同的資源,,分別為它們?cè)O(shè)計(jì)如下URI:

    • /courses/
      :獲取所有課程
    • /teachers/
      :獲取所有教師
    • /students/
      :獲取所有學(xué)生

    同時(shí),,考慮資源之間的關(guān)系,使用嵌套URI或超媒體鏈接來表示資源的關(guān)聯(lián),。例如,,獲取某個(gè)課程下的所有教師:

    • /courses/{course_id}/teachers/

    版本控制

    隨著API的不斷迭代和升級(jí),版本控制變得尤為重要,。學(xué)習(xí)如何在RESTful API中實(shí)現(xiàn)版本控制,,可以確保API的兼容性和穩(wěn)定性。常見的版本控制方式包括:

    • 通過URI路徑:/api/v1/courses/
    • 通過請(qǐng)求頭:Accept: application/vnd.myapi.v1+json
    • 通過查詢參數(shù):/api/courses/?version=1

    在Django REST Framework中,,可以使用Versioning類來自定義版本控制策略,,例如:

    from rest_framework.versioning import URLPathVersioning

    class MyVersioning(URLPathVersioning):
        default_version 
    = 'v1'
        allowed_versions 
    = ['v1', 'v2']
        version_param 
    = 'version'

    緩存優(yōu)化

    利用HTTP緩存機(jī)制來提高API的性能和響應(yīng)速度。掌握如何設(shè)置緩存相關(guān)的HTTP頭部,,如Cache-Control,、ETagLast-Modified等,,合理緩存資源數(shù)據(jù),減少服務(wù)器的負(fù)載和網(wǎng)絡(luò)傳輸量,。在DRF中,,可以使用CachePage視圖裝飾器或自定義緩存類來實(shí)現(xiàn)緩存功能,例如:

    from rest_framework.decorators import api_view, cache_page

    @api_view(['GET'])
    @cache_page(60 * 15)  # 緩存15分鐘
    def course_list(request):
        
    # 獲取課程列表的邏輯
        
    pass

    錯(cuò)誤處理

    設(shè)計(jì)統(tǒng)一的錯(cuò)誤響應(yīng)格式,,對(duì)API中的各種異常情況進(jìn)行合理的捕獲和處理,。返回清晰、友好的錯(cuò)誤信息,,幫助客戶端開發(fā)者快速定位和解決問題,。在DRF中,可以自定義異常處理函數(shù),,例如:

    from rest_framework.views import exception_handler
    from rest_framework.response import Response

    def custom_exception_handler(exc, context):
        response 
    = exception_handler(exc, context)
        
    if response is not None:
            response
    .data = {
                
    'code': response.status_code,
                
    'message': str(exc),
                
    'data': None
            
    }
        
    return response

    DRF擴(kuò)展

    探索DRF提供的各種擴(kuò)展功能,,如分頁,、過濾,、排序等,根據(jù)實(shí)際需求進(jìn)行定制和優(yōu)化,。例如,,使用DjangoFilterBackend實(shí)現(xiàn)過濾功能:

    from django_filters.rest_framework import DjangoFilterBackend

    class CourseViewSet(viewsets.ModelViewSet):
        queryset 
    = Course.objects.all()
        serializer_class 
    = CourseSerializer
        filter_backends 
    = [DjangoFilterBackend]
        filterset_fields 
    = ['name', 'teacher']

    同時(shí),學(xué)習(xí)如何編寫自定義的擴(kuò)展類,,進(jìn)一步提升DRF的靈活性和可擴(kuò)展性,。例如,自定義分頁類:

    from rest_framework.pagination import PageNumberPagination

    class LargeResultsSetPagination(PageNumberPagination):
        page_size 
    = 100
        page_size_query_param 
    = 'page_size'
        max_page_size 
    = 1000

    通過深入學(xué)習(xí)RESTful架構(gòu)和DRF的進(jìn)階知識(shí),,開發(fā)者可以更好地應(yīng)對(duì)復(fù)雜的業(yè)務(wù)場(chǎng)景,,構(gòu)建出更加高效、穩(wěn)定和易于維護(hù)的API,。這不僅有助于提升個(gè)人的技術(shù)水平,,也為團(tuán)隊(duì)和項(xiàng)目帶來更大的價(jià)值。搶先掌握這些知識(shí),,讓你在Web開發(fā)領(lǐng)域更具競(jìng)爭(zhēng)力,!

      本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
      轉(zhuǎn)藏 分享 獻(xiàn)花(0

      0條評(píng)論

      發(fā)表

      請(qǐng)遵守用戶 評(píng)論公約

      類似文章 更多