Django之DRF

1、安装DRF

pip install djangorestframework

2、添加rest_framework应用
在settings.py的INSTALLED_APPS中添加’rest_framework’。

INSTALLED_APPS = [
    ...
    'rest_framework',
]

3、创建序列化器
在子应用目录下创建serializers.py用于保存该应用的序列化器。

序列化器命名:模型类名+Serializers
class ModelSerializer(serializers.ModelSerializer):
    """图书数据序列化器"""
    class Meta:
        model =Model
        fields = '__all__'

model 指明该序列化器处理的数据字段从模型类BookInfo参考生成
fields 指明该序列化器包含模型类中的哪些字段,'all’指明包含所有字段

4、编写视图
在子应用下的views.py中创建视图

from rest_framework.viewsets import ModelViewSet
from .serializers import ModelSerializer
from .models import Model

class BookInfoViewSet(ModelViewSet):
    queryset = Model.objects.all()
    serializer_class = ModelSerializer

queryset 指明该视图集在查询数据时使用的查询集
serializer_class 指明该视图在进行序列化或反序列化时使用的序列化器

5、定义路由

from . import views
from rest_framework.routers import DefaultRouter

urlpatterns = [
    ...
]

router = DefaultRouter()  # 可以处理视图的路由器
router.register(r'books', views.ModelViewSet)  # 向路由器中注册视图集

urlpatterns += router.urls  # 将路由器中的所以路由信息追到到django的路由列表中
<think>好的,用户想了解DjangoDjango Rest Framework(DRF)的区别和联系,以及它们的用途。首先,我需要回顾一下两者的基本概念。Django是一个高级Python Web框架,主要用于快速开发安全且可维护的网站。它遵循MVC模式,但有自己的术语,比如MTV(模型、模板、视图)。Django内置了ORM、管理界面、表单处理等功能,适合传统的全栈Web应用。 然后是Django Rest Framework,它是基于Django的一个强大且灵活的工具包,专门用于构建Web API。DRF扩展了Django的功能,提供了序列化、认证、权限、视图类等特性,使得构建RESTful API更加高效。用户提到的引用[2]也提到,DRF的视图输出的是序列化的JSON数据,而不是用于网页的内容,这很关键。 接下来,我需要整理两者的区别。首先在用途上,Django用于全栈Web开发,包括前后端结合的应用,而DRF专注于构建API,通常用于前后端分离的项目,比如移动应用或单页面应用的数据交互。架构方面,Django的视图处理的是模板渲染,而DRF的视图处理数据序列化和反序列化。此外,DRF提供了更多针对API的功能,比如序列化器、权限类、认证机制(如JWT,引用[4]提到DRF JWT的使用),以及浏览API的功能。 关于联系,DRF是建立在Django之上的,依赖Django的模型、路由和中间件。例如,DRF的序列化器依赖于Django的模型定义,视图和路由配置也是基于Django的结构。用户提供的引用[3]提到RESTful设计风格,这也是DRF遵循的原则,而Django本身并不强制这种风格。 用户可能还想知道如何结合使用两者。引用[1]中的示例展示了创建Django项目后与DRF的交互,比如定义序列化器和视图。通常的流程是先创建Django项目,定义模型,然后用DRF创建API接口。例如,使用DRF的类视图和路由器来简化URL配置,以及使用JWT进行认证(如引用[4]中的代码示例)。 此外,用户可能存在的深层需求是了解何时使用Django,何时需要DRF。如果项目需要提供API给移动端或第三方服务,DRF是更好的选择。而如果主要是服务端渲染的网页,Django足够。同时,两者可以共存,比如同一个项目中既有传统的视图用于管理界面,又有DRF的API接口。 需要确保回答结构清晰,分点说明区别和联系,并举例说明应用场景。还要注意引用提供的资料,比如引用[2]中的视图对比,引用[4]的JWT集成方法。最后生成相关问题,帮助用户进一步探索。</think>### DjangoDjango REST Framework的区别和联系 #### 1. **核心定位** - **Django**:是一个全栈Web框架,用于构建包含前后端的完整Web应用(如博客、电商网站),支持模板渲染、数据库管理、用户认证等功能。例如,Django的视图通过`views.py`动态生成HTML内容并传递给模板[^2]。 - **DRF (Django REST Framework)**:是Django的扩展工具包,专门用于构建RESTful API,服务于前后端分离的架构(如移动端、SPA应用)。其核心是通过序列化器将数据库模型转换为JSON/XML等格式[^2][^3]。 #### 2. **功能差异** | 特性 | Django | DRF | |--------------------|---------------------------------|----------------------------------| | **数据输出** | HTML页面(模板渲染) | JSON/XML(序列化数据) | | **视图逻辑** | 处理HTTP请求,返回渲染后的模板 | 处理API请求,返回序列化数据 | | **核心组件** | 模型(Model)、视图(View)、模板(Template) | 序列化器(Serializer)、API视图类、权限类 | | **典型用途** | 全栈Web开发 | 构建后端API接口 | #### 3. **联系与依赖** - **依赖关系**:DRF完全基于Django,需先安装Django才能使用。例如,DRF的序列化器依赖Django的模型定义,路由配置也通过Django的`urls.py`实现。 - **协同使用**:项目中可同时包含传统Django视图(用于管理后台)和DRF视图(提供API)。例如: ```python # Django视图示例(返回HTML) def home(request): return render(request, "index.html") # DRF视图示例(返回JSON) from rest_framework.views import APIView class UserAPI(APIView): def get(self, request): users = User.objects.all() serializer = UserSerializer(users, many=True) return Response(serializer.data) ``` #### 4. **典型应用场景** - **纯Django**:需要服务端渲染的网站(如新闻门户)、内部管理系统。 - **DRF**: - 移动应用后端(如iOS/Android客户端的数据接口) - 前后端分离的Web应用(如Vue/React前端 + Django后端API) - 第三方数据开放平台(通过API提供数据访问) #### 5. **代码示例:DRF序列化器与视图** ```python # 模型 from django.db import models class Book(models.Model): title = models.CharField(max_length=100) author = models.CharField(max_length=50) # 序列化器(DRF核心组件) from rest_framework import serializers class BookSerializer(serializers.ModelSerializer): class Meta: model = Book fields = ["id", "title", "author"] # API视图(DRF类视图) from rest_framework import generics class BookListAPI(generics.ListCreateAPIView): queryset = Book.objects.all() serializer_class = BookSerializer ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值