
使用NestJS和Prisma構建REST API:身份驗證
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework', # 添加 DRF
]
接下來,我們將通過 DRF 創建一個簡單的 API。我們從定義一個模型開始,然后通過序列化器將數據轉換成 JSON 格式,最后提供接口讓用戶訪問。
在 Django 中,模型是我們用于定義數據結構的地方。比如,我們創建一個 Book
模型,包含書籍的標題、作者和出版日期:
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=100)
published_date = models.DateField()
def __str__(self):
return self.title
代碼解析:
Book
類繼承自 models.Model
,它會自動創建數據庫表來存儲書籍數據。title
和 author
使用 CharField
存儲文本,published_date
使用 DateField
存儲日期。運行以下命令來創建數據庫表:
python manage.py makemigrations
python manage.py migrate
序列化器(Serializer)是將數據轉換為 JSON 格式的工具。DRF 提供了一個強大的 ModelSerializer
,它可以自動地將 Django 模型轉為 JSON 格式。
在 serializers.py
中創建一個序列化器:
from rest_framework import serializers
from .models import Book
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = ['id', 'title', 'author', 'published_date']
代碼解析:
BookSerializer
繼承自 ModelSerializer
,它會根據 Book
模型自動生成序列化規則。fields
用來指定我們需要序列化哪些字段。DRF 提供了多種視圖類,我們可以用它們來處理 HTTP 請求。在這里,我們將使用 ListCreateAPIView
,它支持獲取所有書籍數據以及創建新書籍。
在 views.py
中,添加如下代碼:
from rest_framework import generics
from .models import Book
from .serializers import BookSerializer
class BookListCreateView(generics.ListCreateAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
代碼解析:
BookListCreateView
繼承自 generics.ListCreateAPIView
,它提供了兩個功能:列出所有書籍和創建新書籍。queryset
用來獲取數據庫中的所有書籍。serializer_class
指定我們要用來序列化數據的類。為了讓 API 能被訪問,我們需要配置 URL 路由。在 urls.py
中添加以下內容:
from django.urls import path
from .views import BookListCreateView
urlpatterns = [
path('api/books/', BookListCreateView.as_view(), name='book-list-create'),
]
代碼解析:
/api/books/
?映射到?BookListCreateView
?視圖。通過這個 URL,用戶可以訪問到所有書籍的數據,并可以通過 POST 請求添加新書籍。獲取數據庫表結構工具的步驟如下:
sqlite3
模塊和pandas
庫,Java的JDBC,PHP的PDO擴展等。。獲取數據庫表結構工具有很多,這里列舉一些常用的
現在我們已經完成了 API 的基本設置。你可以通過運行開發服務器來測試 API:
python manage.py runserver
打開瀏覽器,訪問 http://127.0.0.1:8000/api/books/
,你應該能看到一個 JSON 格式的書籍列表。如果你使用 POST
請求并傳遞數據,新的書籍將被創建。
小貼士:你可以使用 Postman 或 Insomnia 等工具來測試你的 API。通過這些工具,你可以方便地發送 GET、POST、PUT 和 DELETE 請求,查看 API 返回的結果。
在實際開發中,我們通常希望對 API 進行權限控制,確保只有授權用戶才能訪問某些功能。DRF 提供了權限系統來簡化這一過程。
例如,只有認證用戶才能訪問書籍數據:
from rest_framework.permissions import IsAuthenticated
class BookListCreateView(generics.ListCreateAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
permission_classes = [IsAuthenticated]
代碼解析:
permission_classes = [IsAuthenticated]
表示只有經過認證的用戶才能訪問該視圖。當 API 返回的數據量很大時,我們可以為它添加分頁功能,這樣用戶就能分批獲取數據,而不會一次性加載所有數據。
在 settings.py
中,配置分頁參數:
REST_FRAMEWORK = {
'PAGE_SIZE': 5,
}
代碼解析:
DRF 提供了豐富的錯誤處理機制,默認情況下,當出現錯誤時,DRF 會自動返回帶有錯誤信息的響應。比如,當發送無效的數據時,DRF 會返回 400 錯誤,并顯示詳細的錯誤消息。
你也可以自定義錯誤消息,或者在視圖中處理特定的異常。
在Python中,你可以使用內置的json
模塊來格式化JSON文件。以下是一個簡單的命令行腳本,它讀取一個JSON文件,然后將其格式化并打印到標準輸出。這個腳本就是用于“python命令行格式化json文件”的實用工具。如果你想要將格式化后的JSON寫回文件,也可以在腳本中添加相應的代碼。下面我們來學習下如何用python命令行格式化json文件:
首先,確保你的JSON文件是有效的。以下是一個名為format_json.py
的Python腳本示例,它專門用于“python命令行格式化json文件”:
import json
import sys
def format_json(input_file_path, output_file_path=None):
try:
with open(input_file_path, 'r') as file:
data = json.load(file)
# 格式化JSON數據
formatted_json = json.dumps(data, indent=4, ensure_ascii=False)
if output_file_path:
# 將格式化后的JSON寫入文件
with open(output_file_path, 'w') as file:
file.write(formatted_json)
else:
# 打印格式化后的JSON到標準輸出
print(formatted_json)
except FileNotFoundError:
print(f"Error: The file {input_file_path} does not exist.")
except json.JSONDecodeError:
print("Error: The file contains invalid JSON.")
except Exception as e:
print(f"An unexpected error occurred: {e}")
if __name__ == "__main__":
if len(sys.argv) < 2:
print("Usage: python format_json.py <input_file_path> [output_file_path]")
else:
input_file_path = sys.argv[1]
output_file_path = sys.argv[2] if len(sys.argv) > 2 else None
format_json(input_file_path, output_file_path)
使用這個腳本,你可以通過命令行傳遞輸入文件的路徑,如果需要,還可以傳遞輸出文件的路徑。例如,如果你想要“python命令行格式化json文件”,可以這樣做:
python format_json.py input.json
這將格式化input.json
文件并打印到標準輸出。如果你想要將格式化后的JSON寫入新文件,可以這樣做:
python format_json.py input.json output.json
這將創建一個名為output.json
的文件,其中包含格式化后的JSON數據。這個操作也是“python命令行格式化json文件”的一個應用場景。
請確保在運行腳本之前,你的Python環境已經設置好,并且你有權限讀取和寫入指定的文件。這個腳本是“python命令行格式化json文件”的一個實際應用,可以幫助你快速格式化JSON數據,無論是打印到控制臺還是寫入到新文件。
今天,我們一起學習了?Django REST Framework,從如何安裝、定義模型,到如何使用 DRF 創建 API,最后我們還學會了如何進行權限控制和分頁處理以及如何用python命令行格式化json文件、如何獲取數據庫表結構工具。通過 DRF,你可以輕松地為你的 Django 項目提供 RESTful API,幫助前端和移動端更方便地訪問后端數據。
練習題:
今天的 Python 學習之旅就到這里啦!記得動手敲代碼,實踐是最好的學習方式。祝大家學習愉快,Python 學習節節高!
文章轉自微信公眾號@打個新