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

分享

Django基于rest_framework實(shí)現(xiàn)Restful接口

 只怕想不到 2023-10-09 發(fā)布于湖北

Django Rest Framework (DRF) 是一個(gè)用于構(gòu)建 RESTful API 的強(qiáng)大框架,。在這篇教程中,,我們將探討如何使用DRF來構(gòu)建一個(gè)簡(jiǎn)單的API,。

圖片
django restframework

1.安裝RestFramework

1.首先,,確保你已經(jīng)安裝了Django和DRF,。你可以使用以下命令進(jìn)行安裝:

pip install djangopip install djangorestframework

安裝好后,,我們創(chuàng)建一個(gè)bbs應(yīng)用,。

python manage.py startapp bbs

2.序列化模型

序列化器允許把像查詢集和模型實(shí)例這樣的復(fù)雜數(shù)據(jù)轉(zhuǎn)換為可以輕松渲染成JSON,XML或其他內(nèi)容類型的原生Python類型,。序列化器還提供反序列化,,在驗(yàn)證傳入的數(shù)據(jù)之后允許解析數(shù)據(jù)轉(zhuǎn)換回復(fù)雜類型。

REST framework中的 serializers與 Django 的FormModelForm類非常像,。restframework 提供了一個(gè)Serializer類,,它為你提供了強(qiáng)大的通用方法來控制響應(yīng)的輸出,以及一個(gè)ModelSerializer類,,它為創(chuàng)建用于處理模型實(shí)例和查詢集的序列化程序提供了有用的快捷實(shí)現(xiàn)方式,。

在bbs目錄下,,打開models.py文件,并定義一個(gè)簡(jiǎn)單的模型,,例如:

from django.db import modelsfrom django.utils import timezone
# Create your models here.class Post(models.Model): title = models.CharField(max_length=200, verbose_name='標(biāo)題') content = models.TextField(verbose_name='內(nèi)容') pub_date = models.DateTimeField(auto_now_add=True, verbose_name='發(fā)布日期')
# 模型數(shù)據(jù)驗(yàn)證 def pub_date_valid(self): return self.pub_date < timezone.now()

另外,,我們?cè)?bbs 目錄下,再創(chuàng)建一個(gè)新的文件 serializers.py,,并添加以下代碼:

from rest_framework import serializersfrom .models import Post
class PostSerializer(serializers.ModelSerializer): class Meta: model = Post fields = '__all__'

這里我們定義了一個(gè)PostSerializer,,它繼承自 DRF 的ModelSerializer類,并指定了要序列化的模型和字段,。當(dāng)然你也可以序列化屬性,,繼承自 serializers.Serializer, 類似于:

class PostSerializer(serializers.Serializer): title = serializers.CharField(max_length=200) content = serializers.CharField() pub_date = serializers.DateTimeField()

3.基于函數(shù)的視圖

from rest_framework.decorators import api_view
@api_view()def hello_world(request): return Response({'message': 'Hello, world!'})
# 區(qū)分 get、 post 方法@api_view(['GET', 'POST'])def get_post_hello_world(request): if request.method == 'POST': return Response({'message': 'Got POST data!', 'data': request.data}) return Response({'message': 'Hello, world!'})

url.py配置如下:

from .views import hello_world, get_post_hello_world
urlpatterns = [ path('/hello', hello_world), path('/get_post_hello', get_post_hello_world)]
圖片
api_view

4.ModelViewSet視圖類

在 bbs 目錄下,,打開views.py文件,,并添加以下代碼:

from rest_framework import viewsetsfrom .models import Postfrom .serializers import MyModelSerializer
class MyModelViewSet(viewsets.ModelViewSet): queryset = MyModel.objects.all() serializer_class = MyModelSerializer

這里我們創(chuàng)建了一個(gè)MyModelViewSet視圖集,它繼承自DRF的ModelViewSet類,,并指定了模型和序列化器,。打開bbs應(yīng)用中的 urls.py 文件,并添加以下代碼:

from django.urls import include, pathfrom .views import PostViewSetfrom rest_framework import routers
router = routers.SimpleRouter()router.register(r'posts', PostViewSet)
urlpatterns = [ path('/', include(router.urls)),]

這里我們注冊(cè)了PostViewSet視圖集,,并將其映射到 /posts 路徑下,。接下來,我們只需訪問路徑,,http://127.0.0.1:8000/bbs/posts/, 發(fā)現(xiàn)報(bào)錯(cuò)

圖片
restframework

不要灰心,,我們檢查一下 settings.py 文件, 并添加下面的配置:


INSTALLED_APPS = [ 'rest_framework',]REST_FRAMEWORK = { 'DEFAULT_RENDERER_CLASSES': [ 'rest_framework.renderers.JSONRenderer', ]}

再次訪問上述鏈接地址,,非常 Wonderful,!

圖片
JSONRenderer

5.總結(jié)及擴(kuò)展使用:

本文中涉及的主要知識(shí)點(diǎn)包括,序列化serialize,, 資源路由routers, 基于函數(shù)的視圖api_view,以及基于viewset的ModelViewSet,。

圖片
django rest framework

routers是一種用于自動(dòng)化URL路由的工具。它提供了一種簡(jiǎn)化和標(biāo)準(zhǔn)化URL配置的方式,,使開發(fā)人員可以輕松地定義API端點(diǎn),,并將它們映射到相應(yīng)的視圖函數(shù)或視圖集上。如上述例子中的ModelViewSet正是利用了routers的這一特性,。

ModelViewSet則是繼承自ViewSet,,通過繼承DRF的ViewSet類或其中的一個(gè)子類,我們可以來定義自己的視圖類,。ViewSet類提供了一系列的標(biāo)準(zhǔn)操作方法,,如listretrieve,、create,、updatedestroy,,分別對(duì)應(yīng)于API的listdetail,、create,、updatedelete操作。

ViewSet類的主要特點(diǎn)如下:

·1,、自動(dòng)映射URL: ViewSet類自動(dòng)將方法映射到URL路徑,,并將其與視圖函數(shù)進(jìn)行關(guān)聯(lián)。例如,,list方法會(huì)自動(dòng)映射到GET /api/endpoint/,,retrieve方法會(huì)映射到GET /api/endpoint/{pk}/,create方法會(huì)映射到POST /api/endpoint/,,以此類推,。·2、支持定制操作: 通過重寫ViewSet類的方法,,來定制每個(gè)操作的行為,。例如,可以在list方法中加入自定義的過濾邏輯,,來對(duì)返回的資源進(jìn)行過濾,。還可以重寫序列化器類、查詢集等,,以滿足您的特定需求,。·3、分離視圖邏輯 使用ViewSet,,可以將相同功能的視圖邏輯組織在一起,,使代碼更清晰、更易于維護(hù),。例如,,可以將多個(gè)視圖函數(shù)合并為一個(gè)ViewSet類,并將它們放在同一個(gè)文件中,。

需要注意的是,ViewSet類并不是強(qiáng)制的,,仍然可以使用自定義的視圖函數(shù)來處理API請(qǐng)求,。但使用ViewSet類可以提高代碼的可讀性和可維護(hù)性,并在很大程度上減少了代碼的重復(fù)性,。

以上就是本文的全部?jī)?nèi)容,,代碼可在我的github[1]上找到。

References

[1] github: https://github.com/liululee/poycode-django-learn



    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(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)論公約

    類似文章 更多