Django rest framework基本介绍与代码示例

下面是针对“Django rest framework基本介绍与代码示例”的详细讲解:

1. Django rest framework基本介绍

Django rest framework是一个建立在Django框架上的Web API开发工具,它基于大量的RESTful原则来构建API。Django rest framework可以帮助我们快速构建高质量的Web API,它提供了许多功能,比如序列化器(Serializer), API视图(API Views), 认证(Authentication),权限控制(Permission)等。

需要使用Django rest framework的话,我们需要在Django项目中添加依赖。在终端中运行如下命令:

pip install djangorestframework

在项目的设置文件settings.py中,我们需要将rest framework添加到INSTALLED_APPS中:

INSTALLED_APPS = (
    #..其他应用
    'rest_framework',
)

2. 代码示例1:使用Serializer进行序列化

Django的ORM(Object Relational Mapper)能够使我们很方便的操作数据库,同时也支持将操作后的结果进行序列化输出,但是默认的序列化方法不可定制,不满足我们实际的需求。在这种情况下,我们可以借助Django rest framework提供的序列化框架。下面,我们来看一下使用Serializer进行序列化的示例代码。

(1)定义序列化器

首先,我们需要定义一个序列化器来描述序列化结构,序列化器需要继承Django rest framework提供的Serializer。

from rest_framework import serializers
from .models import UserInfo

class UserInfoSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    name = serializers.CharField(required=True, max_length=30)
    age = serializers.IntegerField(required=True)
    sex = serializers.BooleanField(required=True)

    def create(self, validated_data):
        """
        用于在创建新的实例时调用
        """
        return UserInfo.objects.create(**validated_data)

    def update(self, instance, validated_data):
        """
        用于在更新实例时调用
        """
        instance.name = validated_data.get('name', instance.name)
        instance.age = validated_data.get('age', instance.age)
        instance.sex = validated_data.get('sex', instance.sex)
        instance.save()
        return instance

在定义序列化器的时候,需要为每一个序列化字段定义一个相应的Serializer类型,我们可以使用Serializer的子类可以支持自定义序列化字段的各种属性,例如是否必须存在、最大长度等。在序列化器中,我们还可以定义create()和update()方法,用来在创建和更新实例时进行调用。

(2)构建视图函数

接下来,我们需要构建一个视图函数来响应客户端请求。这里采用基于函数的视图方式。

from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from rest_framework.renderers import JSONRenderer
from rest_framework.parsers import JSONParser
from .models import UserInfo
from .serializers import UserInfoSerializer

@csrf_exempt
def userinfo_list(request):
    """
    列出所有的用户信息,或者创建一个新的用户信息
    """
    if request.method == 'GET':
        userinfo = UserInfo.objects.all()
        serializer = UserInfoSerializer(userinfo, many=True)
        return JsonResponse(serializer.data, safe=False)

    elif request.method == 'POST':
        data = JSONParser().parse(request)
        serializer = UserInfoSerializer(data=data)
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data, status=201, safe=False)
        return JsonResponse(serializer.errors, status=400)

在视图函数中,我们可以根据对应的HTTP方法进行不同的响应。GET方法用于获取所有实例,POST方法用于创建新的实例。

(3)配置URL映射

最后,我们需要在urls.py中配置URL映射规则。

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^users/$', views.userinfo_list),
]

运行程序并通过浏览器访问http://localhost:8000/users/可以看到序列化后的输出结果。

3. 代码示例2:使用Generic View进行API操作

除了使用基于函数的视图外,Django rest framework同样提供了基于类的视图。上面介绍的序列化范例实际上已经包含了基于函数的视图的使用方法。基于类的视图可以进一步简化代码量,提高代码的可维护性。下面我们来看一下使用Generic View进行API操作的示例代码。

(1)定义模型

为了实现API操作,我们需要首先定义一个模型用来存储数据。在这里,我们定义一个名为UserInfo的模型。

from django.db import models

class UserInfo(models.Model):
    name = models.CharField(max_length=30)
    age = models.IntegerField()
    sex = models.BooleanField()

(2)定义序列化器

我们可以复用上面定义的序列化器。

(3)构建视图类

接下来,我们需要定义一个视图类来操作模型。在这里,我们基于类视图,使用Django rest framework提供的generics包中的ListCreateAPIView视图来实现基本的API操作。

from .models import UserInfo
from .serializers import UserInfoSerializer
from rest_framework import generics

class UserInfoList(generics.ListCreateAPIView):
    queryset = UserInfo.objects.all()
    serializer_class = UserInfoSerializer

class UserInfoDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = UserInfo.objects.all()
    serializer_class = UserInfoSerializer

在视图类中,我们需要指定查询的数据集(queryset),以及使用到的序列化器(serializer_class)。

(4)配置URL映射

最后,在urls.py中配置URL映射规则。

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^users/$', views.UserInfoList.as_view()),
    url(r'^users/(?P<pk>[0-9]+)/$', views.UserInfoDetail.as_view()),
]

运行程序并通过浏览器访问http://localhost:8000/users/可以看到序列化后的输出结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django rest framework基本介绍与代码示例 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • vue项目创建,redis列表字典操作,django用redis的第二种方法

    vue项目的创建(路飞前端) -安装node.js -安装vue的脚手架 -创建vue项目,vue create 项目名字在pycharm中开发vue -webstrom,pyacharm,goland,idea,androidStuidio,Php…. -Edit-conf—-》点+ 选npm—–》在script对应的框中写:servevue…

    Django 2023年4月10日
    00
  • Django常见出错解决方案汇总-乾颐堂

    一、模板类型错误: 错误原因:在models中漏掉了return: class UserProfile(models.Model):      “””      功能说明:        扩展用户      ————————————————————————— …

    Django 2023年4月13日
    00
  • python3.6+django2.0开发一套学员管理系统

    下面是“python3.6+django2.0开发一套学员管理系统”的完整攻略。 1.环境准备 首先需要在本地安装Python3.6,并且安装Django2.0以及其他必要的扩展库,如Pillow,Django-crispy-forms等。可以通过以下命令完成环境准备: # 安装Python3.6 $ sudo apt-get install python3…

    Django 2023年5月16日
    00
  • 动手实践记录(利用django创建一个博客系统)

    1.添加一个分类的标签,和主表的关系是 外键 class Category(models.Model): “”” 分类 “”” name = models.CharField(‘名称’, max_length=16) def __unicode__(self):# 在Python3中用 __str__ 代替 __unicode__ return self.n…

    Django 2023年4月13日
    00
  • 利用django创建一个投票网站(五)

    这一篇从第四部分(en)结尾的地方继续讲起。我们在前几章成功的构建了一个在线投票应用,在这一部分里我们将其创建一些自动化测试。 自动化测试简介 自动化测试是什么? 测试,是用来检查代码正确性的一些简单的程序。 测试在不同的层次中都存在。有些测试只关注某个很小的细节(某个模型的某个方法的返回值是否满足预期?),而另一些测试可能检查对莫个软件的一系列操作(某一用…

    Django 2023年4月13日
    00
  • 利用django创建一个投票网站(三)

    这一篇从第二部分(zh)结尾的地方继续讲起。我们将继续编写投票应用,并且聚焦于如何创建公用界面——也被称为“视图”。 设计哲学 Django 中的视图的概念是「一类具有相同功能和模板的网页的集合」。比如,在一个博客应用中,你可能会创建如下几个视图: 博客首页——展示最近的几项内容。 内容“详情”页——详细展示某项内容。 以年为单位的归档页——展示选中的年份里…

    Django 2023年4月13日
    00
  • Django Form表单内置字段详解

    Django Form表单是Django中最基本、最常用的组件之一,在Django中使用Form表单可以让我们更快地实现Web应用程序开发。 本篇文章将详细介绍Django内置的Form组件中的字段类型,帮助读者更加深入理解Django的Form表单使用方法。 在Django中,我们可以使用Form类来定义表单,而表单的数据可以通过请求(request)对象…

    Django 2023年3月12日
    00
  • django基础知识之认识MVT MVC:

         MVT Django是一款python的web开发框架 与MVC有所不同,属于MVT框架 m表示model,负责与数据库交互 v表示view,是核心,负责接收请求、获取数据、返回结果 t表示template,负责呈现内容到浏览器 MVC 大部分开发语言中都有MVC框架 MVC框架的核心思想是:解耦 降低各功能模块之间的耦合性,方便变更,更容易重构代…

    Django 2023年4月13日
    00
合作推广
合作推广
分享本页
返回顶部