📌  相关文章
📜  如何使用 Django Rest Framework 创建基本 API?

📅  最后修改于: 2022-05-13 01:54:50.864000             🧑  作者: Mango

如何使用 Django Rest Framework 创建基本 API?

Django REST Framework 是默认 Django 框架的包装器,主要用于创建各种 API。在通过 REST 框架创建 API 之前有三个阶段,将模型的数据转换为 JSON/XML 格式(序列化),将此数据呈现到视图,创建用于映射到视图集的 URL。
本文围绕如何使用 Django REST 框架创建基本 API 展开。它假设您熟悉 Django 基础知识 – Django 教程。此外,安装 Django REST 框架。假设您已经使用 Django 创建了一个名为geeksforgeeks的项目,让我们启动 Django REST Framework。

将 rest_framework 添加到 INSTALLED_APPS

要在您的项目中初始化 REST 框架,请转到 settings.py,然后在 INSTALLED_APPS 的底部添加“rest_framework”

Python3
# Application definition
 
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
]


Python3
# Application definition
 
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'apis',
]


Python3
from django.contrib import admin
# include necessary libraries
from django.urls import path, include
 
urlpatterns = [
    path('admin/', admin.site.urls),
    # add apis urls
    path('', include("apis.urls"))
]


Python3
from django.db import models
 
class GeeksModel(models.Model):
    title = models.CharField(max_length = 200)
    description = models.TextField()
 
    def __str__(self):
        return self.title


Python3
# import serializer from rest_framework
from rest_framework import serializers
 
# import model from models.py
from .models import GeeksModel
 
# Create a model serializer
class GeeksSerializer(serializers.HyperlinkedModelSerializer):
    # specify model and fields
    class Meta:
        model = GeeksModel
        fields = ('title', 'description')


Python3
# import viewsets
from rest_framework import viewsets
 
# import local data
from .serializers import GeeksSerializer
from .models import GeeksModel
 
# create a viewset
class GeeksViewSet(viewsets.ModelViewSet):
    # define queryset
    queryset = GeeksModel.objects.all()
     
    # specify serializer to be used
    serializer_class = GeeksSerializer


Python3
# basic URL Configurations
from django.urls import include, path
# import routers
from rest_framework import routers
 
# import everything from views
from .views import *
 
# define the router
router = routers.DefaultRouter()
 
# define the router path and viewset to be used
router.register(r'geeks', GeeksViewSet)
 
# specify URL Path for rest_framework
urlpatterns = [
    path('', include(router.urls)),
    path('api-auth/', include('rest_framework.urls'))
]


创建应用程序和模型

现在,让我们使用命令创建一个应用程序,

python manage.py startapp apis

一个名为 apis 的文件夹现在已经注册了。让我们将此应用程序添加到INSTALLED_APPS和 urls.py 中。
在settings.py中,

Python3

# Application definition
 
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'apis',
]

现在,在 urls.py 中添加 apis url。在geeksforgeeks.urls.py中,

Python3

from django.contrib import admin
# include necessary libraries
from django.urls import path, include
 
urlpatterns = [
    path('admin/', admin.site.urls),
    # add apis urls
    path('', include("apis.urls"))
]

创建模型
为了演示、创建和使用 API,让我们创建一个名为“GeeksModel”的模型。在 apis/models.py

Python3

from django.db import models
 
class GeeksModel(models.Model):
    title = models.CharField(max_length = 200)
    description = models.TextField()
 
    def __str__(self):
        return self.title

现在我们的应用程序已经准备好了,让我们序列化数据并从中创建视图。

序列化

序列化器允许将复杂数据(例如查询集和模型实例)转换为原生Python数据类型,然后可以轻松地将其呈现为 JSON、XML 或其他内容类型。序列化器还提供反序列化,允许在首先验证传入数据后将解析的数据转换回复杂类型。让我们开始创建一个序列化器,在文件 apis/serializers.py 中,

Python3

# import serializer from rest_framework
from rest_framework import serializers
 
# import model from models.py
from .models import GeeksModel
 
# Create a model serializer
class GeeksSerializer(serializers.HyperlinkedModelSerializer):
    # specify model and fields
    class Meta:
        model = GeeksModel
        fields = ('title', 'description')

创建视图集

要将数据呈现到前端并处理来自用户的请求,我们需要创建一个视图。在 Django REST Framework 中,我们将这些称为视图集,所以让我们在 apis/views.py 中创建一个视图,

Python3

# import viewsets
from rest_framework import viewsets
 
# import local data
from .serializers import GeeksSerializer
from .models import GeeksModel
 
# create a viewset
class GeeksViewSet(viewsets.ModelViewSet):
    # define queryset
    queryset = GeeksModel.objects.all()
     
    # specify serializer to be used
    serializer_class = GeeksSerializer

定义 API 的 URL

指定要访问的API的url路径,在apis/urls.py中,

Python3

# basic URL Configurations
from django.urls import include, path
# import routers
from rest_framework import routers
 
# import everything from views
from .views import *
 
# define the router
router = routers.DefaultRouter()
 
# define the router path and viewset to be used
router.register(r'geeks', GeeksViewSet)
 
# specify URL Path for rest_framework
urlpatterns = [
    path('', include(router.urls)),
    path('api-auth/', include('rest_framework.urls'))
]

一切准备就绪后,让我们运行一些命令来激活服务器。

运行服务器并检查 API

运行以下命令创建数据库,并运行服务器,

python manage.py makemigrations
python manage.py migrate
python manage.py runserver

现在访问http://127.0.0.1:8000/geeks/,

使用 Django-REST 框架创建基本 API

要检查项目的代码,请单击此处