前言
我们的下一个项目是使用 Django REST Framework 功能的博客 API。 它将具有用户,权限,并允许完整的 CRUD(创建-读取-更新-删除)功能。 我们还将探索视图集,路由器和文档。
在本文中,我们将构建博客系统基本的 API 部分。
初始化
我们的设置与以前相同。 导航到我们的代码目录,并在其中为该项目创建一个名为 blogapi 的目录。 然后在新的虚拟环境中安装 Django,创建新的 Django 项目(blog_project)和用于博客条目(posts)的应用。
$ cd ~/Desktop && cd code $ mkdir blogapi && cd blogapi $ pipenv install django==2.2.6 $ pipenv shell (blogapi) $ django-admin startproject blog_project . (blogapi) $ python manage.py startapp posts
由于我们添加了新应用,因此我们需要将其告知 Django。 因此,请确保在 settings.py 文件中将帖子添加到我们的 INSTALLED_APPS 列表中。
# blog_project/settings.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # Local 'posts.apps.PostsConfig', # new ]
现在,第一次运行 migrate
,将我们的数据库与 Django 的默认设置和新应用同步。
(blogapi) $ python manage.py migrate
模型
我们的数据库模型将包含五个字段:author,title,body,created_at 和 updated_at。 如果我们在顶部的第二行中导入了 Django 的内置用户模型,则可以使用该模型。
# posts/models.py from django.db import models from django.contrib.auth.models import User class Post(models.Model): author = models.ForeignKey(User, on_delete=models.CASCADE) title = models.CharField(max_length=50) body = models.TextField() created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) def __str__(self): return self.title
请注意,我们还定义了模型的__str__
表示形式,这是 Django 的最佳做法。 这样,我们稍后将在 Django 管理员中看到标题。现在,通过首先创建一个新的迁移文件,然后运行迁移将数据库与我们的模型更改同步来更新数据库。
(blogapi) $ python manage.py makemigrations posts (blogapi) $ python manage.py migrate
好! 我们想在 Django 出色的内置管理应用程序中查看数据,因此,如下所示将其添加到 posts/admin.py 中。
# posts/admin.py from django.contrib import admin from .models import Post admin.site.register(Post)
然后创建一个超级用户帐户,以便我们可以访问管理员。 在下面键入命令,然后输入所有提示。
(blogapi) $ python manage.py createsuperuser
现在我们可以启动本地 Web 服务器。
导航到 http://127.0.0.1:8000/admin/
并使用您的超级用户凭据登录。
单击帖子旁边的“ +Add”按钮,然后创建一个新博客帖子。“作者”旁边将是一个具有您的超级用户帐户的下拉菜单(我的帐户称为 wsv)。 确保选择了作者。 添加标题和正文内容,然后单击“保存”按钮。
您将被重定向到显示所有现有博客帖子的“帖子”页面。