引言
安全性是任何网站的重要组成部分,但对于 Web API 而言则至关重要。 目前,我们的 Blog API 允许任何人进行完全访问。 没有任何限制; 任何用户都可以做任何极其危险的事情。 例如,匿名用户可以创建,阅读,更新或删除任何博客文章。 他们甚至没有创造一个! 显然,我们不希望这样做。
Django REST Framework 附带了一些现成的权限设置,我们可以使用这些设置来保护我们的 API。 这些可以应用于项目级别,视图级别或任何单个模型级别。
在本章中,我们将添加一个新用户并尝试多种权限设置。 然后,我们将创建自己的自定义权限,以便只有博客文章的作者才可以更新或删除它。
新增一个用户
首先创建第二个用户。 这样,我们可以在两个用户帐户之间切换以测试我们的权限设置。
浏览至 http://127.0.0.1:8000/admin/ 的管理员。 然后单击“用户”旁边的“ +添加”。
输入新用户的用户名和密码,然后单击“保存”按钮。 我在这里选择了用户名 testuser
。
下一个屏幕是“管理员用户更改”页面。 我已经将我的用户称为 testuser,在这里我可以添加默认用户模型中包含的其他信息,例如名字,姓氏,电子邮件地址等。但是对于我们而言,这些都不是必需的:我们只需要用户名和密码用于检测。
向下滚动到此页面的底部,然后单击“保存”按钮。 它将重定向回位于 http://127.0.0.1:8000/admin/auth/user/
的主用户页面。
我们可以看到列表中有两个用户。
在 browsable API 增加登录功能
今后,无论何时要在用户帐户之间切换,我们都需要跳到 Django 管理员,退出一个帐户,然后登录另一个帐户。 每次。 然后切换回我们的 API 端点。
这是一种常见的情况,Django REST Framework 具有单行设置以添加登录并直接注销到可浏览的 API 本身。 我们将立即实施。
在项目级别的 urls.py
文件中,添加一个包含 rest_framework.urls
的新 URL 路由。 令人困惑的是,指定的实际路线可以是我们想要的任何东西; 重要的是 rest_framework.urls
包含在某处。 我们将使用 api-auth 路由,因为它与官方文档匹配,但我们可以轻松使用任何我们想要的东西,并且所有功能都将保持相同。
# blog_project/urls.py from django.contrib import admin from django.urls import include, path urlpatterns = [ path('admin/', admin.site.urls), path('api/v1/', include('posts.urls')), path('api-auth/', include('rest_framework.urls')), # new ]
现在,访问 http://127.0.0.1:8000/api/v1/
上的可浏览 API。 有一个细微的变化:右上角的用户名旁边是一个向下的箭头。
由于此时我们已使用超级用户帐户登录(对我而言是 wsv ),因此将显示该名称。 单击链接,然后显示带有“注销”的下拉菜单。 点击它。
右上角的链接现在更改为“登录”。 因此,请点击该按钮。
我们被重定向到 Django REST Framework 登录页面。 在此处使用您的测试用户帐户。
最后,它将重定向到主 API 页面,在右上角有 testuser。
最后,注销我们的 testuser 帐户。
您应该再次在右上角看到“Log in”链接。