📅  最后修改于: 2023-12-03 14:40:46.551000             🧑  作者: Mango
Django 是使用 Python 编程语言开发的 Web 框架。它提供一整套开发 Web 应用程序所需的组件和工具,包括 URL 解析器、模板语言、表单处理、数据库 ORM、会话管理等。Django 还内置了一个轻量的 Web 服务器,支持 WSGI 协议,可以快速启动和测试应用程序。
Django REST framework (DRF) 是 Django 开发的一个功能强大且灵活的工具包,它可以帮助开发人员轻松构建和部署 Web API。DRF 提供了一系列功能,例如序列化、认证、权限、限流、视图、渲染等,还支持多种数据格式,如 JSON、XML、YAML 等。
本文将介绍如何使用 Django 和 DRF 构建一个基础的 CRUD(增删改查)应用程序,以了解其主要功能和用法。
在开始编写应用程序之前,您需要安装并设置好以下组件:
您可以通过 pip 工具安装这些组件:
$ pip install Django
$ pip install djangorestframework
相关文档:
在安装好 Django 和 DRF 后,可以使用以下命令创建新的 Django 项目和应用程序:
$ django-admin startproject myproject
$ cd myproject
$ python manage.py startapp myapp
myproject
是项目名称,myapp
是应用程序名称。
在 settings.py
中配置数据库和应用程序:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'myapp',
]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
然后在应用程序目录的 models.py
中定义数据模型:
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=100)
description = models.TextField()
published_date = models.DateField()
def __str__(self):
return self.title
运行以下命令创建数据库和数据表:
$ python manage.py makemigrations
$ python manage.py migrate
在应用程序目录的 serializers.py
中创建序列化器:
from rest_framework import serializers
from myapp.models import Book
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = '__all__'
这里我们使用 ModelSerializer
类,它自动根据模型定义创建序列化器。也可以手动定义字段。
在应用程序目录的 views.py
中创建视图:
from rest_framework import generics
from myapp.models import Book
from myapp.serializers import BookSerializer
class BookList(generics.ListCreateAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
class BookDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
BookList
视图处理 GET 和 POST 请求,返回所有图书列表和创建新书,BookDetail
视图处理 GET、PUT、PATCH 和 DELETE 请求,返回特定书的详细信息、更新和删除。
运行 python manage.py runserver
可以测试视图。
在应用程序目录的 urls.py
中添加 URL 模式:
from django.urls import path
from myapp.views import BookList, BookDetail
urlpatterns = [
path('books/', BookList.as_view(), name='book_list'),
path('books/<int:pk>/', BookDetail.as_view(), name='book_detail'),
]
path()
函数将 URL 模式映射到相关视图。
在项目目录的 urls.py
中导入应用程序的 URL 模式:
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('myapp.urls')),
]
include()
函数允许将应用程序 URL 模式包含在主项目 URL 模式中。
现在可以通过 http://localhost:8000/api/books/
和 http://localhost:8000/api/books/<id>
访问 RESTful API 了。
可以使用 curl
命令和 REST 客户端(例如 Postman)测试 API:
# GET 请求,获取所有书籍列表
$ curl http://localhost:8000/api/books/
[{"id":1,"title":"Django for beginners","author":"William S. Vincent","description":"The best book for Django beginners.","published_date":"2020-01-01T00:00:00Z"}]
# POST 请求,创建一本新书
$ curl -X POST -H "Content-Type: application/json" -d '{"title": "Django for advanced","author": "John Smith","description": "The best book for Django advanced programmers.","published_date": "2020-06-01"}' http://localhost:8000/api/books/
{"id":2,"title":"Django for advanced","author":"John Smith","description":"The best book for Django advanced programmers.","published_date":"2020-06-01T00:00:00Z"}
# GET 请求,获取指定 ID 的书籍信息
$ curl http://localhost:8000/api/books/1/
{"id":1,"title":"Django for beginners","author":"William S. Vincent","description":"The best book for Django beginners.","published_date":"2020-01-01T00:00:00Z"}
# PUT 请求,更新指定 ID 的书籍信息
$ curl -X PUT -H "Content-Type: application/json" -d '{"title": "Django for intermediate","author": "John Chen","description": "The best book for Django intermediate programmers.","published_date": "2020-06-01"}' http://localhost:8000/api/books/2/
{"id":2,"title":"Django for intermediate","author":"John Chen","description":"The best book for Django intermediate programmers.","published_date":"2020-06-01T00:00:00Z"}
# DELETE 请求,删除指定 ID 的书籍信息
$ curl -X DELETE http://localhost:8000/api/books/2/
在本文中,我们介绍了如何使用 Django 和 DRF 创建基本的 CRUD 应用程序。我们创建了数据模型、序列化器和视图,配置了数据库和 URL 模式,并使用 curl
命令和 REST 客户端测试了 RESTful API。Django 和 DRF 提供了许多功能和工具,可以帮助开发人员快速构建高质量的 Web 应用程序和 API。