django 之 DRF restful

本文深入浅出地介绍了RESTful架构的基本概念,包括其核心原则、表现层、状态转移及HTTP动词的应用等,并阐述了如何利用RESTful架构设计API。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先说说restful把 :

什么是RESTFul架构: 如果一个架构符合REST原则,就称它为RESTful架构。

要理解RESTful架构,理解Representational State Transfer这三个单词的意思。

  • 具象的,就是指表现层,要表现的对象也就是“资源”,什么是资源呢?网站就是资源共享的东西,客户端(浏览器)访问web服务器,所获取的就叫资源。比如html,txt,json,图片,视频等等。

  • 表现,比如,文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格式表现,甚至可以采用二进制格式;图片可以用JPG格式表现,也可以用PNG格式表现。

    浏览器通过URL确定一个资源,但是如何确定它的具体表现形式呢?应该在HTTP请求的头信息中用Accept和Content-Type字段指定,这两个字段才是对"表现层"的描述。

  • 状态转换, 就是客户端和服务器互动的一个过程,在这个过程中, 势必涉及到数据和状态的变化, 这种变化叫做状态转换。

    互联网通信协议HTTP协议,客户端访问必然使用HTTP协议,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生"状态转化"(State Transfer)。

    HTTP协议实际上含有4个表示操作方式的动词,分别是 GET,POST,PUT,DELETE,他们分别对应四种操作。GET用于获取资源,POST用于新建资源,PUT用于更新资源,DElETE用于删除资源。GET和POST是表单提交的两种基本方式,比较常见,而PUT和DElETE不太常用。

    而且HTTP协议是一种无状态协议,这样就必须把所有的状态都保存在服务器端因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生"状态转化"(State Transfer)

综合上面的解释,RESTful架构就是:

  • 每一个URL代表一种资源;
  • 客户端和服务器之间,传递这种资源的某种表现层;
  • 客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。
<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、付费专栏及课程。

余额充值