如何使用 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。
Steps
- Add rest_framework to INSTALLED_APPS
- Create a app and model
- Serialization
- Creating a viewset
- Define URLs of API
- Run server and check API
将 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/,
要检查项目的代码,请单击此处