溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

用Django REST framework寫API的示例分析

發(fā)布時(shí)間:2021-12-08 16:25:07 來(lái)源:億速云 閱讀:161 作者:柒染 欄目:云計(jì)算

本篇文章給大家分享的是有關(guān)用Django REST framework寫API的示例分析,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

Django默認(rèn)是前后端綁定的,提供了Template和Form,現(xiàn)在流行前后端分離項(xiàng)目,Python大佬坐不住了,于是便有了Django REST framework:https://github.com/tomchristie 用Django REST framework寫API的示例分析

官網(wǎng):https://www.django-rest-framework.org/ 用Django REST framework寫API的示例分析

Django REST framework(簡(jiǎn)稱DRF)是個(gè)Python技術(shù)棧的后端框架,用來(lái)構(gòu)建RESTful API。

RESTful API

REST,是指REpresentational State Transfer,有個(gè)精辟的解釋什么是RESTful:

  • 看URL就知道要什么

  • 看Method就知道干什么

  • 看Status Code就知道結(jié)果如何

良好的RESTful API設(shè)計(jì)的基本原則是:

  • 返回JSON

  • 嚴(yán)禁亂用狀態(tài)碼

  • 處理好分頁(yè)

  • 返回具體的實(shí)體數(shù)據(jù)而不是返回通用的JSON數(shù)據(jù)

  • 請(qǐng)求對(duì)象有默認(rèn)值

創(chuàng)建項(xiàng)目

接下來(lái)我們使用DRF創(chuàng)建一個(gè)簡(jiǎn)單的API,允許管理員查看和編輯用戶和組。

先創(chuàng)建名為tutorial的project和名為quickstart的app:

# 創(chuàng)建項(xiàng)目目錄
mkdir tutorial
cd tutorial

# 創(chuàng)建Python虛擬環(huán)境
python -m venv env
# 激活虛擬環(huán)境
env\Scripts\activate.bat  
# Mac中使用`source env/bin/activate`

# 在虛擬環(huán)境中安裝Django和Django REST framework
pip install django
pip install djangorestframework

# 創(chuàng)建project,注意最后有個(gè)“.”,表示在當(dāng)前目錄創(chuàng)建
django-admin startproject tutorial .
cd tutorial
# 創(chuàng)建app
django-admin startapp quickstart
cd ..

創(chuàng)建好的目錄結(jié)構(gòu)如下:

$ pwd
<some path>/tutorial
$ find .
.
./manage.py
./tutorial
./tutorial/__init__.py
./tutorial/quickstart
./tutorial/quickstart/__init__.py
./tutorial/quickstart/admin.py
./tutorial/quickstart/apps.py
./tutorial/quickstart/migrations
./tutorial/quickstart/migrations/__init__.py
./tutorial/quickstart/models.py
./tutorial/quickstart/tests.py
./tutorial/quickstart/views.py
./tutorial/settings.py
./tutorial/urls.py
./tutorial/wsgi.py

一般不會(huì)把a(bǔ)pp放到project里面,這里是為了避免命名沖突。

接著同步數(shù)據(jù)庫(kù):

python manage.py migrate

然后創(chuàng)建一個(gè)超級(jí)管理員,密碼password123

python manage.py createsuperuser --email admin@example.com --username admin

Serializers

序列化是指把數(shù)據(jù)庫(kù)模型轉(zhuǎn)換為JSON。新建模塊tutorial/quickstart/serializers.py

from django.contrib.auth.models import User, Group
from rest_framework import serializers


class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = ['url', 'username', 'email', 'groups']


class GroupSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Group
        fields = ['url', 'name']

Views

視圖用來(lái)接受Web請(qǐng)求并且返回Web響應(yīng)。打開tutorial/quickstart/views.py,添加代碼:

from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from rest_framework import permissions
from tutorial.quickstart.serializers import UserSerializer, GroupSerializer


class UserViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows users to be viewed or edited.
    """
    queryset = User.objects.all().order_by('-date_joined')
    serializer_class = UserSerializer
    permission_classes = [permissions.IsAuthenticated]


class GroupViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows groups to be viewed or edited.
    """
    queryset = Group.objects.all()
    serializer_class = GroupSerializer
    permission_classes = [permissions.IsAuthenticated]

URLs

配置路由,打開tutorial/urls.py,添加代碼:

from django.urls import include, path
from rest_framework import routers
from tutorial.quickstart import views

router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)

# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
    path('', include(router.urls)),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

因?yàn)檫@里用的不是view而是viewsets,所以可以自動(dòng)生成API的URLconf,只需要注冊(cè)class即可。

也可以不用viewsets,用view,再自定義API URL。

Pagination

分頁(yè)用來(lái)控制每頁(yè)返回多少數(shù)據(jù),在tutorial/settings.py中添加:

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10
}

Settings

tutorial/settings.py中,把'rest_framework'添加到

INSTALLED_APPS:

INSTALLED_APPS = [
    ...
    'rest_framework',
]

測(cè)試API

啟動(dòng)項(xiàng)目:

python manage.py runserver

訪問(wèn)http://127.0.0.1:8000/users/,點(diǎn)擊右上角用超管登錄,即可看到: 用Django REST framework寫API的示例分析

終于修復(fù)了從博客園復(fù)制粘貼到公眾號(hào)代碼塊自動(dòng)換行沒(méi)有滾動(dòng)條的問(wèn)題,F(xiàn)12看了才知道有個(gè)樣式被覆蓋了,加上這句就搞定了:

#topics .postBody pre {
    white-space: pre !important;
}

以上就是用Django REST framework寫API的示例分析,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI