Django使用rest_framework写出API

下面是关于“Django使用rest_framework写出API”的完整攻略。

1. 安装Django和rest_framework

在开始使用Django中的rest_framework库编写API之前,需要安装Django和rest_framework库,我们可以通过以下命令进行安装:

pip install django
pip install djangorestframework

2. 新建Django项目

安装完Django和rest_framework库后,我们可以新建一个Django项目,假设我们想要新建一个名为“api”的项目,可以通过以下命令进行创建:

django-admin startproject api

3. 新建Django应用

在新建好Django项目后,我们需要新建一个应用来编写我们的API,假设我们想要新建一个名为“example”的应用,可以通过以下命令进行创建:

cd api
python manage.py startapp example

4. 配置settings.py

在新建好Django应用后,我们需要将这个应用添加到Django项目的settings.py文件中,可以通过以下步骤进行配置:

第一步,打开api项目下的settings.py文件,将example应用添加到INSTALLED_APPS中,修改后的代码如下:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'example',
]

第二步,将rest_framework添加到api项目下的settings.py文件的INSTALLED_APPS中,修改后的代码如下:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'example',
]

第三步,配置rest_framework的默认设置,将以下代码添加到api项目下的settings.py文件中:

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.AllowAny',
    ],
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication',
    ],
}

其中DEFAULT_PERMISSION_CLASSES是默认权限设置,通过这个设置我们可以指定API的访问权限,这里我们将API的访问权限设置为了所有用户都有权限访问(rest_framework.permissions.AllowAny);DEFAULT_AUTHENTICATION_CLASSES是默认的身份验证设置,通过这个设置我们可以对API访问者的身份进行验证,这里我们指定使用SessionAuthentication和BasicAuthentication进行验证。

5. 编写model

在配置好settings.py文件后,我们需要编写model,假设我们需要编写一个名为Person的model,有以下两个字段:

  • name(姓名,字符串类型)
  • age(年龄,整型)

我们可以在example应用下的models.py文件中添加如下代码:

from django.db import models

# Create your models here.

class Person(models.Model):
    name = models.CharField(max_length=40)
    age = models.IntegerField()

6. 创建serializer

在编写好model后,我们需要编写serializer,serializer可以将model序列化成为JSON格式,反之也可以通过JSON格式创建model,假设对于上面编写的Person Model,有以下两个字段:

  • name(姓名,字符串类型)
  • age(年龄,整型)

我们可以在example应用下的serializers.py文件中添加如下代码:

from rest_framework import serializers
from .models import Person

class PersonSerializer(serializers.ModelSerializer):
    class Meta:
        model = Person
        fields = ['id', 'name', 'age']

在这段代码中,我们通过导入rest_framework库中的serializers类来编写serializer,使用PersonSerializer类来指定序列化哪个model。

7. 编写View

在编写好serializer后,我们需要编写View,View用于对serializer进行操作,进而提供Web API。假设我们需要编写一个名为Person的API视图,可以通过以下代码在example应用下的views.py中进行编写:

from rest_framework import generics
from rest_framework.response import Response
from .models import Person
from .serializers import PersonSerializer

class PersonList(generics.ListCreateAPIView):
    queryset = Person.objects.all()
    serializer_class = PersonSerializer

    def list(self, request, *args, **kwargs):
        queryset = self.get_queryset()
        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)

在这段代码中,我们通过导入rest_framework库中的generics类来编写View,使用PersonList类来指定对应API视图的处理。

8. 配置URL

在完成View编写后,我们需要指定API视图对应的URL,在example应用下的urls.py中添加如下代码:

from django.urls import path
from .views import PersonList

urlpatterns = [
    path('person/', PersonList.as_view()),
]

在这段代码中,我们将视图类PersonList绑定到了/person/的URL上,这样用户通过访问http://127.0.0.1:8000/person/就可以访问到API视图了。

9. 启动服务并访问API

最后,我们需要启动Django服务来提供Web API,可以通过以下命令启动服务:

python manage.py runserver

启动完成后,我们就可以访问localhost:8000/person/来访问我们的API视图了。

示例说明

下面我们使用两个示例来说明如何使用Django和rest_framework编写Web API。

示例1:获取Person

假设我们需要获取Person,我们可以通过访问http://127.0.0.1:8000/person/来获取Person,API返回的数据格式为JSON,示例如下:

[
    {
        "id": 1,
        "name": "Tom",
        "age": 18
    },
    {
        "id": 2,
        "name": "Lucy",
        "age": 20
    }
]

示例2:添加Person

假设我们需要添加Person,我们可以通过发送POST请求到http://127.0.0.1:8000/person/来添加Person,请求的数据格式为JSON,示例如下:

{
    "name": "Jerry",
    "age": 22
}

添加成功后,API返回的数据格式为JSON,示例如下:

{
    "id": 3,
    "name": "Jerry",
    "age": 22
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django使用rest_framework写出API - Python技术站

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

相关文章

  • Feign调用全局异常处理解决方案

    下面我会详细讲解“Feign调用全局异常处理解决方案”的完整攻略,过程中我会给出两条示例说明。 什么是Feign调用? Feign是一个声明式的Web服务客户端,支持多种注解风格。Feign可以将java接口转换成HTTP请求,实现客户端调用远程的HTTP服务。这样我们就可以以极简的方式调用HTTP API,更加方便。 为什么需要Feign调用全局异常处理解…

    人工智能概览 2023年5月25日
    00
  • 掌握C++编程中反斜杠续行符的使用方法

    掌握C++编程中反斜杠续行符的使用方法非常重要。它可以帮助我们避免代码行过长,提高代码可读性和可维护性。下面是针对这个问题的完整攻略,包括定义、使用方法和2个示例。 什么是反斜杠续行符? 反斜杠续行符是 C++ 语言提供的一种机制,它允许在代码行末尾使用反斜杠字符 \ 来表示下一行代码的延续。这样可以将一行代码分割成多行的形式,使得代码更加清晰、易读和维护。…

    人工智能概览 2023年5月25日
    00
  • Centos 7.2中MongoDB数据库的安装与卸载教程

    Centos 7.2中MongoDB数据库的安装与卸载教程 本文将介绍在Centos 7.2操作系统中安装和卸载MongoDB数据库的教程,包括MongoDB的安装、配置和启动,并提供两个简单的示例说明。 安装MongoDB 步骤1:添加MongoDB yum repository 运行以下命令以添加MongoDB yum repository: sudo …

    人工智能概览 2023年5月25日
    00
  • 使用 Python 查找本月的最后一天的方法汇总

    下面开始详细讲解“使用 Python 查找本月的最后一天的方法汇总”的完整攻略。 方案一:使用calendar模块 Python内置的calendar模块提供了获取月份天数的功能,可以方便地通过它查找每个月的最后一天。 import calendar import datetime # 获取当前时间 now = datetime.datetime.now()…

    人工智能概论 2023年5月25日
    00
  • 浅谈Django中view对数据库的调用方法

    下面是“浅谈Django中view对数据库的调用方法”的完整攻略: 前言 Django是一款使用了MTV(MVC的一种变形)模式的web框架,因此处理web应用中的请求和响应、数据库的调用等一系列操作,都需要使用到不同层级的组件。其中,view作为MVC中的控制器,在Django中负责接收客户端的请求并渲染响应,同时也是连接模型和模板的关键。在view中调用…

    人工智能概览 2023年5月25日
    00
  • 详解Nginx中的重定向功能

    当需要将某个URL地址重定向到另外一个URL地址时,我们就需要使用重定向功能。Nginx是一款高效的Web服务器,它提供了多种重定向方法。本文将详解Nginx中的重定向功能,希望对你有所帮助。 一、Nginx中的重定向 1. 什么是重定向 重定向指的是当用户访问某个URL时,服务器将该URL重定向到另外一个URL的过程。重定向可以帮助我们更好的管理网站内容,…

    人工智能概览 2023年5月25日
    00
  • python疲劳驾驶困倦低头检测功能的实现

    Python疲劳驾驶困倦低头检测功能的实现是一种人脸识别技术,它可以通过摄像头捕捉图像,识别人的面部特征,判断其是否疲劳、困倦或者低头,给出警报提醒,从而保障驾车安全。实现该功能的方法有很多种,以下是其中的一种攻略: 步骤一:安装必要的Python第三方库 要实现该功能需要使用到Python的第三方库,最重要的是OpenCV库和dlib库,需要先在Pytho…

    人工智能概览 2023年5月25日
    00
  • MongoDB修改、删除文档的域属性实例

    MongoDB是一个流行的文档数据库,支持一些常用的操作,如修改和删除文档的域属性。下面我来详细讲解MongoDB修改、删除文档的域属性的完整攻略。 修改文档 修改文档可以使用MongoDB中的update()方法,其语法结构如下: db.collection.update( <query>, <update>, { upsert: …

    人工智能概论 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部