1 创建api服务
本文简介使用django3和restful插件创建应用时的步骤,以及如何在INSTALLED_APPS
中添加 api.apps.ApiConfig 。路由配置包括在顶级和api应用的urls.py中添加路径。视图使用rest_framework的generics,而序列化器在serializers.py中创建。完成后,通过访问127.0.0.1:1999/api/
可测试API。
- 安装插件
安装 库
pip install django
pip install djangorestframework\~=3.11.0
创建应用:
django-admin startproject bookstore_project
cd bookstore_project
python manage.py startapp books
2 模型和基本配置
现在,进入项目的settings.py文件中,将新的应用程序和REST Framework添加到INSTALLED_APPS中:
INSTALLED_APPS = [
...
'rest_framework',
'books',
...
]
api 返回的数据为json格式, 我们的API将公开一系列端点,该端点在JSON中列出所有书籍。
所以据此需要新的URL路由,新的视图,新的序列化文件 URL view serializer file。
可以通过多种方式来组织这些文件,但是我的首选方法是创建专用的api应用,这样可以保证扩展性。即使我们将来添加更多应用,每个应用仍可以包含专用网页所需的模型,视图,模板和url。
整个项目将保存在专用的api应用程序中的 API专用文件创建 api 应用
python manage.py startapp api
注册应用 如果添加了这一行,就不能再添加 books,相互冲突
INSTALLED_APPS = ['api.apps.ApiConfig',
'books.apps.BooksConfig',
...
'books' # 与之上的'books.apps.BooksConfig'效果一样,同时添加将导致冲突
]
创建模型
创建一个models.py文件来定义书籍模型:# books/models.py from django.db import models class Book(models.Model): title = models.CharField(max_length=100) author = models.CharField(max_length=100) price = models.DecimalField(max_digits=10, decimal_places=2) def __str__(self): return self.title
序列化
接着,在books应用程序中创建一个serializers.py文件来定义序列化器
# books/serializers.py
from rest_framework import serializers
from .models import Book
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = '__all__'
3 路由
api应用的urls
定义顶层路由 路径 形如: api/
添加路径
config/urls.py
urlpatterns = [path('api/', include('api.urls')), ...# new]
添加路径
api/urls.py
from django.urls import path
from .views import BookAPIView
urlpatterns = [
path('', BookAPIView.as_view()),
]
完整代码示例:
# bookstore_project/urls.py
from django.contrib import admin
from django.urls import path, include
from rest_framework import routers
from books.views import BookViewSet
router = routers.DefaultRouter()
router.register(r'books', BookViewSet)
urlpatterns = [
path('admin/', admin.site.urls),
path('', include(router.urls)),
]
3 视图
api 应用的 Views 将依赖 django-restframwork的 内建视图
内建rest视图故意模仿传统Django基于类的通用视图的格式,但是它们并不一样
为了在调用api视图时,不至于混淆框架视图文件views.py,
视图处理api/views.py
from rest_framework import generics
from books.models import Book
from .serializers import BookSerializer
class BookAPIView(generics.ListAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
4 序列化和数据库迁移处理
序列化处理,创建serializers.py, touch api/serializers.py
from rest_framework import serializers
from books.models import Book
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = ('title', 'subtitle', 'author', 'isbn')
没有数据库改动,就不需要执行 python manage.py makemigrations && python manage.py migrate
5 访问测试
运行服务:
python manage.py runserver
指令:curl 127.0.0.1:1999/api/
可以发现有一个此页面中内置的许多功能,比如可视化
通过url 127.0.0.1:1999/api/ 。
6 小结
通过该 :1999/api/ 接口进行书籍的创建、更新和删除操作,django3配合django-restframwork可以更方便有效构建符合风格的应用接口。
以方便使用者专注以实现业务。