djangorestframwork 简单使用

这篇博客介绍了如何在Django中使用REST框架。首先,通过`pip install djangorestframework`安装库,然后在settings文件中配置INSTALLED_APPS。接着,定义了两个模型ClassInfo和Student,并创建了它们之间的外键关系。随后,利用REST框架的ModelSerializer快速创建了对应的序列化类。最后,展示了如何创建和使用数据,包括序列化和反序列化操作。
安装

pip install djangorestframework

django中使用需做:
#在 setting 文件中的 INSTALLED_APPS 中添加 rest_framework
demo中需要使用的模型
from django.db import models

class ClassInfo(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=20)

    class Meta:
        db_table = 'class_info'

class Student(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=20)
    age = models.IntegerField()
    class_info = models.ForeignKey(ClassInfo,on_delete=models.CASCADE)

    class Meta:
        db_table = 'student'

创建模型对应的 serializer 类
from rest_framework import serializers
from .models import Student,ClassInfo

#快捷创建
class StudentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Student

class ClassSerializer(serializers.ModelSerializer):
    class Meta:
        model = ClassInfo
创建实验数据
def create_data():
    class1 = ClassInfo.objects.create(name='14级1班')
    class2 = ClassInfo.objects.create(name='14级2班')
    Student.objects.create(name='小明',age='14',class_info=class1)
    Student.objects.create(name='小红',age='15',class_info=class1)
    Student.objects.create(name='小蓝',age='13',class_info=class2)
    Student.objects.create(name='小白',age='16',class_info=class2)
    Student.objects.create(name='小亮',age='17',class_info=class2)
简单使用
from .serializer import StudentSerializer,ClassSerializer
#序列化&反序列化测试
def serializer_test():
    students = Student.objects.all()
    #创建序列化器对象,序列化单个对象
    serializer = StudentSerializer(instance=students.first())
    #获取序列化好的数据
    data = serializer.data
    #创建序列化器对象,序列化多个对象
    serializer = StudentSerializer(instance=students,many=True)
    data = serializer.data

    #创建序列化器对象
    data = {'name':'王哈哈','age':16}
    serializer = StudentSerializer(data=data)
    #校验,校验失败将异常
    serializer.is_valid(raise_exception=True)

<think> 我们正在讨论Django后端项目中配置数据库的API选择。用户希望对比REST Framework、RESTful API以及其他类型API,以确定适合Django项目的数据库配置方案。 首先,我们需要理清几个概念: 1. RESTful API:一种设计风格,基于HTTP协议,使用URL定位资源,用HTTP方法(GET、POST、PUT、DELETE等)描述操作。 2. Django REST Framework (DRF):一个用于构建Web API的Django应用框架,它帮助开发者快速构建符合RESTful风格的API。 3. 其他类型的API:比如SOAP、GraphQL等。 在Django项目中,我们通常使用DRF来构建RESTful API。这是因为: - DRF提供了强大的序列化功能,可以方便地将Django模型转换为API数据,反之亦然。 - DRF内置了认证、权限、分页、视图集等,减少了重复代码。 - DRF与Django ORM深度集成,使得数据库操作(增删改查)非常便捷。 对于配置数据库,我们通常通过定义Django模型(models.py)来设计数据库结构,然后通过DRF的序列化器(serializers.py)将模型数据序列化为API可输出的格式(如JSON),并通过视图(views.py)处理HTTP请求,执行数据库操作。 其他类型的API在Django中也有应用,但不如DRF主流: - GraphQL:可以使用第三方库(如graphene-django)实现,它允许客户端按需查询数据,但需要额外学习GraphQL语法。 - SOAP:在Django中较少使用,因为RESTful API更轻量、灵活。 因此,对于Django项目,特别是需要快速开发、与数据库紧密集成的场景,推荐使用DRF构建RESTful API。 §§相关问题§§ 1. Django REST Framework的核心组件有哪些? 2. 如何在Django项目中配置和使用DRF? 3. GraphQL与RESTful API在Django项目中的适用场景有何不同? </think> ### Django后端项目API选择:REST Framework vs RESTful API及其他 在Django项目中配置数据库时,API架构的选择直接影响开发效率和系统性能。以下是关键对比分析: #### 1. **Django REST Framework (DRF)** - **核心优势**: - 深度集成Django ORM,数据库操作效率高:`ModelSerializer`自动映射模型字段,支持复杂关联查询 - 开箱即用功能:认证(Token/JWT)、权限控制、分页、限流等 - 可视化API文档(Swagger/Redoc) - **数据库配置示例**: ```python # models.py class Money(db.Model): bank = db.CharField(max_length=128) ... def set_password(self, raw_password): self.password = make_password(raw_password) # 自动哈希加密 # serializers.py class MoneySerializer(serializers.ModelSerializer): class Meta: model = Money fields = '__all__' extra_kwargs = {'password': {'write_only': True}} # 安全保护 ``` - **适用场景**:需要快速构建安全API的中大型项目,特别是需要精细控制数据库操作的场景[^1] #### 2. **原生RESTful API** - **特点**: - 手动实现HTTP方法(GET/POST/PUT/DELETE) - 需自行处理序列化/反序列化: ```python def money_list(request): if request.method == 'GET': data = list(Money.objects.values()) return JsonResponse(data, safe=False) ``` - **优缺点**: - ✅ 零依赖,适合微型项目 - ❌ 重复造轮子,缺乏标准化安全机制 - **适用场景**:简单CRUD操作,无复杂权限需求 #### 3. **其他API类型对比** | 类型 | 数据库适配性 | Django生态支持 | 典型用例 | |------------|-------------------|-------------------|--------------------------| | **GraphQL** | 灵活查询但需额外优化 | graphene-django | 多端异构数据需求 | | **SOAP** | 重型XML解析效率低 | django-soap | 遗留企业系统集成 | | **gRPC** | 二进制传输高效 | django-grpc | 微服务间高性能通信 | #### 4. **推荐选择策略** 1. **首选DRF**:当项目涉及: - 复杂模型关系(如银行-用户嵌套) - 需要`db_table`自定义表名等高级ORM功能 - 多角色权限系统(如银行数据分级访问) 2. **次选原生RESTful**:仅当: - 项目规模极小(<5个API端点) - 严格限制第三方依赖 > **关键结论**:对于Django数据库集成项目,DRF提供最完整的解决方案,其`ModelSerializer`和视图集能自动处理85%+的数据库操作场景,同时保持代码规范性[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值