一、前端後端分離
隨着Web應用程序的發展,前端和後端的分離越來越受歡迎。 Django REST framework 提供了各種用於構建可擴展的API的工具和庫。 API支持前後端分離,這意味着我們可以使用獨立的前端框架,例如Vue.js、React.js或Angular,來實現客戶端,同時使用DRF構建虛構化的後端
如果你是一個REST API的後端人員,但對前端開發不是很熟悉,這並不妨礙你使用 Django Rest Framework 進行API構建。一些優秀的JavaScript框架可以幫助你將 Django Rest Framework 構建的API和你的前端應用程序分離開。
from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from myapp.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
class GroupViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows groups to be viewed or edited.
"""
queryset = Group.objects.all()
serializer_class = GroupSerializer
二、DRF認證
Django Rest Framework提供了一個優雅的方式來應用認證,使你更願意使用它來保護你的API。DRF提供了一個可插拔的認證架構,允許你使用session、Token、OAuth1a和OAuth2等不同的認證方案。
這裡我們介紹一個輕量級的認證庫SimpleJWT,它是構建在JWT(JSON Web Token)之上的庫,它可以輕鬆地用於開發REST APIs,並提供了輕鬆的設置和安全認證。SimpleJWT不需要特定的用戶模型,它可以與任何Django身份驗證系統一起使用。
# settings.py
INSTALLED_APPS = [
...
'rest_framework',
'rest_framework_simplejwt',
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
}
三、序列化和驗證
在DRF中,序列化是將Python對象轉換為JSON格式的過程,當數據以某種方式從API公開時,你可以使用序列化器來更好地組織,過濾和限制總體數據。同時,DRF還提供了驗證器來確保輸入數據的正確性。它們共同為DRF提供強大的數據安全機制和易於使用的數據交互方式。
# serializers.py
from rest_framework import serializers
from myapp.models import User
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = '__all__'
def create(self, validated_data):
user = User(
email=validated_data['email'],
username=validated_data['username'],
first_name=validated_data['first_name'],
last_name=validated_data['last_name'],
)
user.set_password(validated_data['password'])
user.save()
return user
# views.py
from rest_framework import generics
from myapp.models import User
from myapp.serializers import UserSerializer
class UserList(generics.ListCreateAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
原創文章,作者:WFIB,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/132349.html