您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Django REST framework怎么使用
## 目录
1. [DRF简介](#drf简介)
2. [环境准备](#环境准备)
3. [快速入门](#快速入门)
4. [序列化器详解](#序列化器详解)
5. [视图与路由](#视图与路由)
6. [认证与权限](#认证与权限)
7. [过滤与分页](#过滤与分页)
8. [最佳实践](#最佳实践)
---
## DRF简介
Django REST framework(简称DRF)是构建Web API的强大工具包,具有以下核心特性:
- **序列化**:支持ORM和非ORM数据源的转换
- **视图类**:提供多种视图简化开发
- **认证系统**:支持OAuth1/OAuth2等认证方案
- **路由系统**:自动生成API路由
- **测试客户端**:内置API测试工具
```python
# 示例:基本API视图
from rest_framework.views import APIView
from rest_framework.response import Response
class HelloAPI(APIView):
def get(self, request):
return Response({"message": "Hello DRF!"})
pip install django djangorestframework
# settings.py
INSTALLED_APPS = [
...
'rest_framework',
]
# 可选DRF全局设置
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 20
}
# models.py
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=50)
pub_date = models.DateField()
# serializers.py
from rest_framework import serializers
from .models import Book
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = '__all__'
# views.py
from rest_framework import generics
from .models import Book
from .serializers import BookSerializer
class BookListCreate(generics.ListCreateAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
# urls.py
from django.urls import path
from .views import BookListCreate
urlpatterns = [
path('books/', BookListCreate.as_view()),
]
class UserSerializer(serializers.Serializer):
email = serializers.EmailField()
username = serializers.CharField(max_length=100)
is_active = serializers.BooleanField(default=False)
class BookSerializer(serializers.ModelSerializer):
# 自定义字段
days_since_pub = serializers.SerializerMethodField()
class Meta:
model = Book
fields = ['id', 'title', 'author', 'days_since_pub']
def get_days_since_pub(self, obj):
return (now() - obj.pub_date).days
def validate_title(self, value):
if 'django' not in value.lower():
raise serializers.ValidationError("书名必须包含'django'")
return value
视图类 | 功能 |
---|---|
APIView | 基础视图类 |
GenericAPIView | 通用视图基类 |
ListCreateAPIView | 列表+创建 |
RetrieveUpdateDestroyAPIView | 详情+修改+删除 |
from rest_framework import viewsets
class BookViewSet(viewsets.ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register(r'books', BookViewSet)
urlpatterns = [
path('', include(router.urls)),
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.TokenAuthentication',
]
}
from rest_framework import permissions
class IsAdminOrReadOnly(permissions.BasePermission):
def has_permission(self, request, view):
if request.method in permissions.SAFE_METHODS:
return True
return request.user.is_staff
from django_filters.rest_framework import DjangoFilterBackend
class BookListView(generics.ListAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
filter_backends = [DjangoFilterBackend]
filterset_fields = ['author', 'pub_date']
class LargeResultsSetPagination(PageNumberPagination):
page_size = 1000
page_size_query_param = 'page_size'
max_page_size = 10000
项目结构建议
api/
├── __init__.py
├── serializers/
│ ├── __init__.py
│ └── book.py
├── views/
│ ├── __init__.py
│ └── book.py
└── routers.py
性能优化
queryset = Book.objects.select_related('author').prefetch_related('categories')
文档生成 “`python from rest_framework.schemas import get_schema_view
schema_view = get_schema_view(title=“Bookstore API”)
4. **版本控制**
```python
REST_FRAMEWORK = {
'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.NamespaceVersioning'
}
本文详细介绍了DRF的核心功能和使用方法,包括: - 序列化器的多种用法 - 视图类和视图集的选择 - 认证权限系统的配置 - 过滤分页等高级功能
通过合理使用DRF,可以快速构建出功能完善、符合RESTful规范的API服务。
提示:实际开发时应根据项目需求选择合适的组件组合,避免过度设计。 “`
注:本文实际约3000字,完整4000字版本可扩展以下内容: 1. 更详细的错误处理示例 2. 第三方包集成(如django-filter) 3. 性能监控和日志记录 4. 完整的项目实战案例 5. API文档自动生成(Swagger/Redoc)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。