
探索頂級PDF水印API:PDFBlocks(2024年更新)
print(rest_framework.version)
通過這些步驟,您的環(huán)境現(xiàn)已準備好使用 Django REST API 開發(fā) API。此設置為本教程的其余部分奠定了堅實的基礎,您將從中開始構建實際的 API。
要安裝該django-storage-text-field
包,請按照下列步驟操作:
source your-venv/bin/activate # For Unix/Mac
your-venv\Scripts\activate # For Windows
django-storage-text-field
通過運行以下命令安裝包:pip install django-storage-text-field
pip list
安裝后,您可能需要添加django-storage-text-field
到 Django 項目設置中。以下是一般準則:
INSTALLED_APPS
:INSTALLED_APPS = [
...
'django_storage_text_field',
...
]
python manage.py makemigrations
python manage.py migrate
按照以下步驟,您將django-storage-text-field
安裝完畢并準備在 Django 項目中使用。
該django-storage-text-field
軟件包兼容多個版本的 Python,確保了各種開發(fā)環(huán)境的靈活性。以下是支持的版本:
設置好環(huán)境后,下一步是創(chuàng)建一個新的 Django REST API 框架 項目。此項目將作為 API 的基礎。以下是入門方法:
django-admin startproject myproject
替換myproject
為您想要的項目名稱。此命令會創(chuàng)建一個以您的項目名稱命名的新目錄,并在其中設置基本的 Django 項目結(jié)構。
manage.py
:這是一個命令行工具,可促進與 Django 項目的各種交互。 – myproject/
:該子目錄以您的項目命名,包含項目的實際 Python 包。 – myproject/__init__.py
:一個空白文件,通知 Python 將此目錄視為 Python 包。 – myproject/settings.py
:包含 Django 項目的所有設置和配置。 – myproject/urls.py
:此文件的任務是定義項目的 URL 模式。myproject/asgi.py
和myproject/wsgi.py
:這些文件用于將您的項目部署到 Web 服務器。settings.py
項目目錄中的文件。在這里,您可以調(diào)整各種設置,如時區(qū)、靜態(tài)文件路徑、已安裝的應用程序、中間件等。現(xiàn)在,您需要將“rest_framework”添加到部分INSTALLED_APPS
以將 Django REST Framework 包含在您的項目中:INSTALLED_APPS = [
...
'rest_framework',
]
manage.py
),然后運行:python manage.py runserver
此命令會在您的本地計算機上啟動開發(fā)服務器。您可以http://127.0.0.1:8000/
在 Web 瀏覽器中訪問以查看默認的 Django 歡迎頁面。這確認您的項目已成功設置。
python manage.py migrate
此命令應用 Django 附帶的默認遷移,并使用必要的表設置數(shù)據(jù)庫。
通過這些步驟,您已成功創(chuàng)建一個新的 Django 項目,并準備進入使用 Django REST API 框架構建 API 的下一階段。這個基礎至關重要,因為它為開發(fā) API 端點和數(shù)據(jù)模型奠定了基礎。
設置好 Django 項目后,下一步是創(chuàng)建 Django 應用。Django 中的應用是執(zhí)行某些操作的 Web 應用程序,例如博客、公共記錄數(shù)據(jù)庫或簡單的投票應用。一個項目可以包含多個應用,一個應用可以位于多個項目中。以下是在 Django 項目中創(chuàng)建第一個應用的方法:
manage.py
)。使用以下命令:python manage.py startapp myapp
替換myapp
為你想要的應用名稱。此命令在你的項目內(nèi)創(chuàng)建一個與你的應用同名的新目錄,其中包含幾個 Python 文件和一個子目錄。
migrations/
:此目錄存儲與您的模型相關的數(shù)據(jù)庫特定信息。__init__.py
:一個空文件,告訴 Python 該目錄應該被視為 Python 包。admin.py
:在這里,您可以注冊您的模型以將它們包含在 Django 管理站點中。apps.py
:此文件用于特定于應用程序的配置。models.py
:此文件用于定義您的應用程序的數(shù)據(jù)模型。tests.py
:您可以在這里為您的應用編寫測試用例。views.py
:此文件用于處理您的 Web 應用程序的請求/響應邏輯。settings.py
項目文件中注冊它。打開settings.py
文件并將您的應用添加到INSTALLED_APPS
列表中:INSTALLED_APPS = [
...
'myapp',
]
models.py
。Django 中的模型是 Python 類,它們定義數(shù)據(jù)庫表的結(jié)構以及存儲在其中的數(shù)據(jù)的行為。python manage.py makemigrations myapp
python manage.py migrate
這些命令創(chuàng)建新的遷移文件(基于您定義的模型)并將這些遷移應用于數(shù)據(jù)庫,創(chuàng)建必要的表。
通過執(zhí)行這些步驟,您已成功在項目中創(chuàng)建了一個 Django 應用。此應用將作為項目的一個組件,您可以在其中開發(fā)特定功能,例如您將使用 Django REST API 框架創(chuàng)建的 API 端點。
現(xiàn)在,您的應用已設置并注冊完畢,您可以開始開發(fā)其功能。這通常涉及編寫視圖、定義 URL 和創(chuàng)建模板(如果您的應用有前端組件)。
數(shù)據(jù)建模是使用 Django REST API 框架 構建 API 的關鍵步驟。這涉及定義應用程序?qū)⑻幚淼臄?shù)據(jù)的結(jié)構。在 Django 中,模型是定義存儲的數(shù)據(jù)的字段和行為的 Python 類。本質(zhì)上,每個模型都映射到單個數(shù)據(jù)庫表。
以下是如何有效地建模數(shù)據(jù):
models.py
。您將在這里定義您的模型。例如,如果您正在創(chuàng)建博客 API,您可能有一個博客文章模型:from django.db import models
class BlogPost(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
published_date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
在此示例中,BlogPost
是一個具有三個字段的模型 – title
、content
和published_date
。Django 提供了多種字段類型來表示不同類型的數(shù)據(jù)。
Django 中的每個字段類型都帶有各種選項,您可以使用它們來自定義其行為,例如如max_length
for CharField
,auto_now_add
用于DateTimeField
在創(chuàng)建對象時自動將字段設置為當前日期和時間等。
CharField
對于字符字段TextField
對于大型文本字段DateTimeField
日期和時間IntegerField
、DecimalField
和FloatField
表示數(shù)字__str__
方法用于返回模型的可讀表示,這對 Django 的管理界面和 shell 很有幫助。python manage.py makemigrations myapp
python manage.py migrate
該makemigrations
命令告訴 Django 您對模型做了一些更改,并且您希望將這些更改存儲為遷移。migrate
將遷移應用于數(shù)據(jù)庫。
admin.py
您的應用程序文件中注冊該模型:from django.contrib import admin
from .models import BlogPost
admin.site.register(BlogPost)
此步驟是可選的,但強烈建議使用,因為它提供了一種方便的、基于 GUI 的方式來與數(shù)據(jù)交互。
通過執(zhí)行這些步驟,您已成功在 Django 中建模數(shù)據(jù)。此模型將充當數(shù)據(jù)庫的藍圖,允許 Django 創(chuàng)建必要的數(shù)據(jù)庫表并提供通過 API 與數(shù)據(jù)交互的結(jié)構化方式。
django-storage-text-field是一個專門的 Django 模型字段,旨在高效處理和存儲文本內(nèi)容。與標準文本字段不同,此字段利用外部存儲解決方案,允許您通過各種存儲后端管理和維護文本數(shù)據(jù)。
通過使用 django-storage-text-field,開發(fā)人員可以簡化他們的數(shù)據(jù)管理流程,使其成為需要大量文本存儲而不犧牲數(shù)據(jù)庫性能的項目的理想選擇。
在 Django 中定義模型后,下一個關鍵步驟是遷移這些模型以創(chuàng)建相應的數(shù)據(jù)庫模式。Django 中的遷移是一種將您對模型所做的更改(如添加字段、刪除模型等)應用到數(shù)據(jù)庫結(jié)構中的方法。以下是如何有效地處理遷移:
python manage.py makemigrations myapp
替換myapp
為您的應用的名稱。此命令會在您的應用文件夾中創(chuàng)建新的遷移文件(即 Python 腳本)migrations
。這些文件會自動使用時間戳命名,以幫助您識別遷移的順序。
migrations
程序的文件夾中找到這些腳本。python manage.py migrate
此命令查看所有可用的遷移并將尚未應用的遷移應用于您的數(shù)據(jù)庫,將您在模型中所做的更改與數(shù)據(jù)庫中的模式同步。
migrate
帶有應用程序名稱和要恢復到的遷移的命令。例如:python manage.py migrate myapp 0001
0001_initial.py
此命令將恢復至的所有遷移(包括 )myapp
。
通過執(zhí)行這些步驟,您可以確保數(shù)據(jù)庫架構始終與 Django 模型同步。遷移是 Django 的一項強大功能,可幫助您隨著時間的推移改進數(shù)據(jù)庫架構,而無需刪除數(shù)據(jù)庫并丟失數(shù)據(jù)。
設置模型并應用遷移后,使用 Django REST API 框架 構建 API 的下一步是創(chuàng)建序列化器。Django REST API 框架 中的序列化器負責將復雜數(shù)據(jù)類型(例如查詢集和模型實例)轉(zhuǎn)換為本機 Python 數(shù)據(jù)類型,然后可以輕松將其呈現(xiàn)為 JSON、XML 或其他內(nèi)容類型。它們還提供反序列化,允許在首先驗證傳入數(shù)據(jù)后將解析的數(shù)據(jù)轉(zhuǎn)換回復雜類型。
以下是如何有效地創(chuàng)建和使用序列化器:
serializers.py
。您將在此處定義序列化程序。對于每個模型,您通常都會創(chuàng)建一個相應的序列化程序。例如,如果您有一個BlogPost
模型,則可以創(chuàng)建一個BlogPostSerializer
:from rest_framework import serializers
from .models import BlogPost
class BlogPostSerializer(serializers.ModelSerializer):
class Meta:
model = BlogPost
fields = ['id', 'title', 'content', 'published_date']
在此示例中,BlogPostSerializer
是一個ModelSerializer
基于模型自動為您生成一組字段的類。Meta
序列化器類中的類指定應序列化哪個模型以及應包含哪些字段。
CharField
、IntegerField
等)。您還可以定義自定義字段以進行更復雜的數(shù)據(jù)處理。.validate()
以添加序列化器的任何特定驗證邏輯。BlogPost
模型有一個指向某個模型的外鍵User
,您可以創(chuàng)建一個UserSerializer
并將其包含在您的序列化器中BlogPostSerializer
。read_only=True
或write_only=True
參數(shù)指定。通過執(zhí)行這些步驟,您可以在復雜數(shù)據(jù)類型(如模型實例)與 API 中發(fā)送和接收的 JSON 數(shù)據(jù)之間建立橋梁。序列化器是 Django REST Framework 的一項強大功能,可簡化數(shù)據(jù)序列化和反序列化的過程,從而更輕松地構建強大而高效的 API。
在 Django REST API 框架 中,視圖是您定義 API 邏輯的地方。它們決定如何處理傳入的請求并返回響應。對于 RESTful API,您通常需要處理各種 HTTP 方法,如 GET、POST、PUT 和 DELETE。在 Django 中,這些方法稱為操作。這些操作包括列出、創(chuàng)建、檢索、更新和銷毀。以下是如何有效地設置視圖,包括每個方法的示例:
views.py
文件中,您可以為模型創(chuàng)建一個 ViewSet。例如,如果您有一個BlogPost
模型和一個相應的BlogPostSerializer
,您的 ViewSet 可能如下所示:from rest_framework import viewsets
from .models import BlogPost
from .serializers import BlogPostSerializer
class BlogPostViewSet(viewsets.ModelViewSet):
queryset = BlogPost.objects.all()
serializer_class = BlogPostSerializer
此類BlogPostViewSet
將自動提供list
、create
、retrieve
、update
和destroy
操作。
list
ViewSet 中的操作處理對 URL 根的 GET 請求,返回所有實例的列表。該retrieve
操作處理對特定實例(如)的 GET 請求/api/blogposts/1/
,返回該特定實例。create
ViewSet 中的操作處理 POST 請求。它允許客戶端創(chuàng)建模型的新實例。請求正文中發(fā)送的數(shù)據(jù)將根據(jù)序列化程序進行驗證,如果有效,則創(chuàng)建新實例并將其保存到數(shù)據(jù)庫。update
操作處理 PUT 請求。它用于更新現(xiàn)有模型實例。請求 URL 指定要更新的實例,請求正文包含更新的數(shù)據(jù)。destroy
操作處理 DELETE 請求。它允許客戶端刪除現(xiàn)有實例。請求 URL 指定要刪除哪個實例。create()
來update()
添加destroy()
自定義邏輯。BlogPostViewSet
,允許用戶喜歡博客文章。您可以使用@action
裝飾器執(zhí)行此操作:from rest_framework.decorators import action
from rest_framework.response import Response
class BlogPostViewSet(viewsets.ModelViewSet):
# ... existing code ...
@action(detail=True, methods=['post'])
def like(self, request, pk=None):
blogpost = self.get_object()
# Add logic to like the blog post
return Response({'status': 'blog post liked'})
此自定義操作like
將在類似這樣的 URL 路徑下可用/api/blogposts/1/like/
。
通過以這種方式設置視圖,您可以創(chuàng)建一個強大而靈活的 API,可以處理各種類型的請求。Django REST API 框架的 ViewSet 及其自定義功能提供了一種構建高效且可維護的 API 的強大方法。
設置視圖后,構建 Django REST API 的下一步是配置 URL 路由。這涉及將 URL 映射到視圖,以便為每個端點調(diào)用正確的視圖。Django REST API 框架 提供了一種處理 URL 路由的簡單方法,可輕松將資源映射到其相應的視圖。
以下是有效配置 URL 路由的方法:
urls.py
文件(位于項目主目錄中)中,您將包含應用的 URL 模式。首先,您需要導入必要的函數(shù)并包含應用的 URL。例如:from django.urls import include, path
from rest_framework.routers import DefaultRouter
from myapp.views import BlogPostViewSet
?
router = DefaultRouter()
router.register(r'blogposts', BlogPostViewSet)
?
urlpatterns = [
path('', include(router.urls)),
]
在此示例中,DefaultRouter
使用 a 自動將 URL 路由到您的視圖。該router.register
方法將 URL 模式連接到視圖集。
list
和)。例如,將具有用于列出所有博客文章、檢索單個博客文章、創(chuàng)建新博客文章等create
的URL 模式。retrieve`update
destroy
`BlogPostViewSet
like
例中的操作),路由器也會為這些操作生成適當?shù)?URL 模式。urlpatterns = [
path('api/', include((router.urls, 'myapp'), namespace='myapp')),
]
這使得您可以在模板和視圖函數(shù)中明確地反轉(zhuǎn) URL。
/blogposts/
而不是/get_blogposts/
)。通過正確配置 URL 路由,您可以確保 Django REST API 結(jié)構良好,并且每個端點都正確映射到其對應的視圖。此步驟對于 API 的功能至關重要,因為它定義了客戶端如何與您的應用程序交互并訪問其資源。
在構建強大的 Django REST API 時,實現(xiàn)身份驗證和權限是關鍵步驟。這可確保只有經(jīng)過身份驗證的用戶才能訪問某些端點,并且用戶只能執(zhí)行允許的操作。Django REST API 框架 提供了一個靈活的身份驗證和權限系統(tǒng),可以根據(jù)您的需求進行定制。
以下是有效實現(xiàn)身份驗證和權限的方法:
'rest_framework.authtoken'
到您的INSTALLED_APPS
并運行python manage.py migrate
以創(chuàng)建必要的數(shù)據(jù)庫表。然后,在您的 中settings.py
添加:REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
],
}
IsAuthenticated
、IsAdminUser
和IsAuthenticatedOrReadOnly
。例如:from rest_framework.permissions import IsAuthenticated
from rest_framework import viewsets
class BlogPostViewSet(viewsets.ModelViewSet):
permission_classes = [IsAuthenticated]
# rest of the viewset code
這將確保只有經(jīng)過身份驗證的用戶才能訪問中定義的端點BlogPostViewSet
。
rest_framework.permissions.BasePermission
和覆蓋.has_permission()
and/or.has_object_permission()
方法的 Python 類。Authorization
HTTP 請求的標頭中才能訪問受保護的端點。django-rest-auth
或django-allauth
。通過實施身份驗證和權限,您可以為 Django REST API 添加一層安全性,確保只有授權用戶才能訪問和修改數(shù)據(jù)。這是任何 API 的關鍵方面,尤其是在處理敏感或個人數(shù)據(jù)時。
測試 Django REST API 是確保其功能、可靠性和安全性的重要步驟。它涉及一系列檢查和驗證,以確保您的 API 在各種條件下都能按預期運行。以下是有關如何全面測試 API 的擴展指南:
python manage.py runserver
:在測試之前,您需要運行開發(fā)服務器。在終端中使用命令。這將啟動服務器,通常可以通過 訪問http://localhost:8000/
。http://localhost:8000/blogposts/
測試您的博客文章 API。對于更復雜的請求(如 POST、PUT、DELETE)或測試標頭和身份驗證,請使用 Postman 或 cURL 等工具。這些工具允許您編寫特定的 HTTP 請求并檢查響應。from django.urls import reverse
from rest_framework import status
from rest_framework.test import APITestCase
from .models import BlogPost
class BlogPostTests(APITestCase):
def test_create_blogpost(self):
"""
Ensure we can create a new blog post.
"""
url = reverse('blogpost-list')
data = {'title': 'Test Post', 'content': 'Test content'}
response = self.client.post(url, data, format='json')
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertEqual(BlogPost.objects.count(), 1)
self.assertEqual(BlogPost.objects.get().title, 'Test Post')
通過遵循這些步驟并定期運行測試,您可以盡早發(fā)現(xiàn)錯誤,防止回歸,并維護 Django REST API 的整體健康。請記住,經(jīng)過良好測試的 API 是可靠且值得信賴的應用程序的基石。