
探索頂級PDF水印API:PDFBlocks(2024年更新)
print(rest_framework.version)
通過這些步驟,您的環境現已準備好使用 Django REST API 開發 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,確保了各種開發環境的靈活性。以下是支持的版本:
設置好環境后,下一步是創建一個新的 Django REST API 框架 項目。此項目將作為 API 的基礎。以下是入門方法:
django-admin startproject myproject
替換myproject
為您想要的項目名稱。此命令會創建一個以您的項目名稱命名的新目錄,并在其中設置基本的 Django 項目結構。
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
項目目錄中的文件。在這里,您可以調整各種設置,如時區、靜態文件路徑、已安裝的應用程序、中間件等。現在,您需要將“rest_framework”添加到部分INSTALLED_APPS
以將 Django REST Framework 包含在您的項目中:INSTALLED_APPS = [
...
'rest_framework',
]
manage.py
),然后運行:python manage.py runserver
此命令會在您的本地計算機上啟動開發服務器。您可以http://127.0.0.1:8000/
在 Web 瀏覽器中訪問以查看默認的 Django 歡迎頁面。這確認您的項目已成功設置。
python manage.py migrate
此命令應用 Django 附帶的默認遷移,并使用必要的表設置數據庫。
通過這些步驟,您已成功創建一個新的 Django 項目,并準備進入使用 Django REST API 框架構建 API 的下一階段。這個基礎至關重要,因為它為開發 API 端點和數據模型奠定了基礎。
設置好 Django 項目后,下一步是創建 Django 應用。Django 中的應用是執行某些操作的 Web 應用程序,例如博客、公共記錄數據庫或簡單的投票應用。一個項目可以包含多個應用,一個應用可以位于多個項目中。以下是在 Django 項目中創建第一個應用的方法:
manage.py
)。使用以下命令:python manage.py startapp myapp
替換myapp
為你想要的應用名稱。此命令在你的項目內創建一個與你的應用同名的新目錄,其中包含幾個 Python 文件和一個子目錄。
migrations/
:此目錄存儲與您的模型相關的數據庫特定信息。__init__.py
:一個空文件,告訴 Python 該目錄應該被視為 Python 包。admin.py
:在這里,您可以注冊您的模型以將它們包含在 Django 管理站點中。apps.py
:此文件用于特定于應用程序的配置。models.py
:此文件用于定義您的應用程序的數據模型。tests.py
:您可以在這里為您的應用編寫測試用例。views.py
:此文件用于處理您的 Web 應用程序的請求/響應邏輯。settings.py
項目文件中注冊它。打開settings.py
文件并將您的應用添加到INSTALLED_APPS
列表中:INSTALLED_APPS = [
...
'myapp',
]
models.py
。Django 中的模型是 Python 類,它們定義數據庫表的結構以及存儲在其中的數據的行為。python manage.py makemigrations myapp
python manage.py migrate
這些命令創建新的遷移文件(基于您定義的模型)并將這些遷移應用于數據庫,創建必要的表。
通過執行這些步驟,您已成功在項目中創建了一個 Django 應用。此應用將作為項目的一個組件,您可以在其中開發特定功能,例如您將使用 Django REST API 框架創建的 API 端點。
現在,您的應用已設置并注冊完畢,您可以開始開發其功能。這通常涉及編寫視圖、定義 URL 和創建模板(如果您的應用有前端組件)。
數據建模是使用 Django REST API 框架 構建 API 的關鍵步驟。這涉及定義應用程序將處理的數據的結構。在 Django 中,模型是定義存儲的數據的字段和行為的 Python 類。本質上,每個模型都映射到單個數據庫表。
以下是如何有效地建模數據:
models.py
。您將在這里定義您的模型。例如,如果您正在創建博客 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 提供了多種字段類型來表示不同類型的數據。
Django 中的每個字段類型都帶有各種選項,您可以使用它們來自定義其行為,例如如max_length
for CharField
,auto_now_add
用于DateTimeField
在創建對象時自動將字段設置為當前日期和時間等。
CharField
對于字符字段TextField
對于大型文本字段DateTimeField
日期和時間IntegerField
、DecimalField
和FloatField
表示數字__str__
方法用于返回模型的可讀表示,這對 Django 的管理界面和 shell 很有幫助。python manage.py makemigrations myapp
python manage.py migrate
該makemigrations
命令告訴 Django 您對模型做了一些更改,并且您希望將這些更改存儲為遷移。migrate
將遷移應用于數據庫。
admin.py
您的應用程序文件中注冊該模型:from django.contrib import admin
from .models import BlogPost
admin.site.register(BlogPost)
此步驟是可選的,但強烈建議使用,因為它提供了一種方便的、基于 GUI 的方式來與數據交互。
通過執行這些步驟,您已成功在 Django 中建模數據。此模型將充當數據庫的藍圖,允許 Django 創建必要的數據庫表并提供通過 API 與數據交互的結構化方式。
django-storage-text-field是一個專門的 Django 模型字段,旨在高效處理和存儲文本內容。與標準文本字段不同,此字段利用外部存儲解決方案,允許您通過各種存儲后端管理和維護文本數據。
通過使用 django-storage-text-field,開發人員可以簡化他們的數據管理流程,使其成為需要大量文本存儲而不犧牲數據庫性能的項目的理想選擇。
在 Django 中定義模型后,下一個關鍵步驟是遷移這些模型以創建相應的數據庫模式。Django 中的遷移是一種將您對模型所做的更改(如添加字段、刪除模型等)應用到數據庫結構中的方法。以下是如何有效地處理遷移:
python manage.py makemigrations myapp
替換myapp
為您的應用的名稱。此命令會在您的應用文件夾中創建新的遷移文件(即 Python 腳本)migrations
。這些文件會自動使用時間戳命名,以幫助您識別遷移的順序。
migrations
程序的文件夾中找到這些腳本。python manage.py migrate
此命令查看所有可用的遷移并將尚未應用的遷移應用于您的數據庫,將您在模型中所做的更改與數據庫中的模式同步。
migrate
帶有應用程序名稱和要恢復到的遷移的命令。例如:python manage.py migrate myapp 0001
0001_initial.py
此命令將恢復至的所有遷移(包括 )myapp
。
通過執行這些步驟,您可以確保數據庫架構始終與 Django 模型同步。遷移是 Django 的一項強大功能,可幫助您隨著時間的推移改進數據庫架構,而無需刪除數據庫并丟失數據。
設置模型并應用遷移后,使用 Django REST API 框架 構建 API 的下一步是創建序列化器。Django REST API 框架 中的序列化器負責將復雜數據類型(例如查詢集和模型實例)轉換為本機 Python 數據類型,然后可以輕松將其呈現為 JSON、XML 或其他內容類型。它們還提供反序列化,允許在首先驗證傳入數據后將解析的數據轉換回復雜類型。
以下是如何有效地創建和使用序列化器:
serializers.py
。您將在此處定義序列化程序。對于每個模型,您通常都會創建一個相應的序列化程序。例如,如果您有一個BlogPost
模型,則可以創建一個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
等)。您還可以定義自定義字段以進行更復雜的數據處理。.validate()
以添加序列化器的任何特定驗證邏輯。BlogPost
模型有一個指向某個模型的外鍵User
,您可以創建一個UserSerializer
并將其包含在您的序列化器中BlogPostSerializer
。read_only=True
或write_only=True
參數指定。通過執行這些步驟,您可以在復雜數據類型(如模型實例)與 API 中發送和接收的 JSON 數據之間建立橋梁。序列化器是 Django REST Framework 的一項強大功能,可簡化數據序列化和反序列化的過程,從而更輕松地構建強大而高效的 API。
在 Django REST API 框架 中,視圖是您定義 API 邏輯的地方。它們決定如何處理傳入的請求并返回響應。對于 RESTful API,您通常需要處理各種 HTTP 方法,如 GET、POST、PUT 和 DELETE。在 Django 中,這些方法稱為操作。這些操作包括列出、創建、檢索、更新和銷毀。以下是如何有效地設置視圖,包括每個方法的示例:
views.py
文件中,您可以為模型創建一個 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 請求。它允許客戶端創建模型的新實例。請求正文中發送的數據將根據序列化程序進行驗證,如果有效,則創建新實例并將其保存到數據庫。update
操作處理 PUT 請求。它用于更新現有模型實例。請求 URL 指定要更新的實例,請求正文包含更新的數據。destroy
操作處理 DELETE 請求。它允許客戶端刪除現有實例。請求 URL 指定要刪除哪個實例。create()
來update()
添加destroy()
自定義邏輯。BlogPostViewSet
,允許用戶喜歡博客文章。您可以使用@action
裝飾器執行此操作: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/
。
通過以這種方式設置視圖,您可以創建一個強大而靈活的 API,可以處理各種類型的請求。Django REST API 框架的 ViewSet 及其自定義功能提供了一種構建高效且可維護的 API 的強大方法。
設置視圖后,構建 Django REST API 的下一步是配置 URL 路由。這涉及將 URL 映射到視圖,以便為每個端點調用正確的視圖。Django REST API 框架 提供了一種處理 URL 路由的簡單方法,可輕松將資源映射到其相應的視圖。
以下是有效配置 URL 路由的方法:
urls.py
文件(位于項目主目錄中)中,您將包含應用的 URL 模式。首先,您需要導入必要的函數并包含應用的 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
和)。例如,將具有用于列出所有博客文章、檢索單個博客文章、創建新博客文章等create
的URL 模式。retrieve`update
destroy
`BlogPostViewSet
like
例中的操作),路由器也會為這些操作生成適當的 URL 模式。urlpatterns = [
path('api/', include((router.urls, 'myapp'), namespace='myapp')),
]
這使得您可以在模板和視圖函數中明確地反轉 URL。
/blogposts/
而不是/get_blogposts/
)。通過正確配置 URL 路由,您可以確保 Django REST API 結構良好,并且每個端點都正確映射到其對應的視圖。此步驟對于 API 的功能至關重要,因為它定義了客戶端如何與您的應用程序交互并訪問其資源。
在構建強大的 Django REST API 時,實現身份驗證和權限是關鍵步驟。這可確保只有經過身份驗證的用戶才能訪問某些端點,并且用戶只能執行允許的操作。Django REST API 框架 提供了一個靈活的身份驗證和權限系統,可以根據您的需求進行定制。
以下是有效實現身份驗證和權限的方法:
'rest_framework.authtoken'
到您的INSTALLED_APPS
并運行python manage.py migrate
以創建必要的數據庫表。然后,在您的 中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
這將確保只有經過身份驗證的用戶才能訪問中定義的端點BlogPostViewSet
。
rest_framework.permissions.BasePermission
和覆蓋.has_permission()
and/or.has_object_permission()
方法的 Python 類。Authorization
HTTP 請求的標頭中才能訪問受保護的端點。django-rest-auth
或django-allauth
。通過實施身份驗證和權限,您可以為 Django REST API 添加一層安全性,確保只有授權用戶才能訪問和修改數據。這是任何 API 的關鍵方面,尤其是在處理敏感或個人數據時。
測試 Django REST API 是確保其功能、可靠性和安全性的重要步驟。它涉及一系列檢查和驗證,以確保您的 API 在各種條件下都能按預期運行。以下是有關如何全面測試 API 的擴展指南:
python manage.py runserver
:在測試之前,您需要運行開發服務器。在終端中使用命令。這將啟動服務器,通常可以通過 訪問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')
通過遵循這些步驟并定期運行測試,您可以盡早發現錯誤,防止回歸,并維護 Django REST API 的整體健康。請記住,經過良好測試的 API 是可靠且值得信賴的應用程序的基石。