Django Rest Framework 2.x 的教程(6)
需要
-
- Python > 3.6
-
- Mac or Linux (recommend)
- SQLite3
执行登录处理的实现
实现登录的简单方法是使用相应的库。如果自己去实现的话就需要学习框架,而且如果时间紧迫的话,就必须采用这种简单的方法来解决。
pip install django-rest-auth
# ...
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'livesync',
'rest_framework',
'drf_yasg',
'draft_todo.apps.DraftTodoConfig',
'rest_framework.authtoken'
]
#...
# ...
import rest_auth
# ...
urlpatterns = [
# ...
path('rest-auth', include('rest_auth.urls'))
]
python manage.py migrate
python manage.py runserver
让我们使用 Swagger 进行确认。
让我们使用已经创建好的用户登录一次。
让我们查阅用户的信息。
我们来试着添加一个任务吧。
顺便提一下,如果重新加载页面,登录信息将会更新。
我在管理員帳號下試著進行確認。
让我们从管理员那里确认一下令牌。
让我们来确认一下是否已经添加了任务。
实现accounts/login功能
如果在未登录的情况下尝试添加任务,会发生什么情况?LoginRequiredMixin 将尝试作为一种简单的解决方案将页面转移到 accounts/login。
這是一個對於rest框架相當不理想的規範,因此我們應該覆寫它。
# ...
from rest_framework.decorators import api_view
from rest_framework import status
# ...
@api_view(['GET'])
def not_authorized(request):
return Response(status=status.HTTP_401_UNAUTHORIZED , data='NotAuthenticated')
# ...
urlpatterns = [
# ...
path('accounts/login/', dview.not_authorized)
]
如果通过 Get 方法进行 accounts/login/ 的访问,则无论如何都会返回 401 状态码的API(你没登录)。
顺便说一句,这个怎么说呢,和以前的 API 写法不太一样,感觉像是函数一样。这是 Django 中视图的另一种定义方法,即基于函数的方式。正因为有这个,Django 才变得不想进行团队开发。
在@api_view中,表示其是一个get方法的函数。只要是函数,就应该能理解。如果不能理解的话,可能不熟悉Python,可以考虑使用其他语言来开发RESTful API。
当使用 Swagger 进行确认时,结果如下所示。
下一步是什么?
暂时只需完成这一部分,后面的问题可以凭借意愿解决。
如果有任何问题,请在存储库的问题页面中提出。
提示
在身份验证方面有哪些种类?还有哪一个是推荐的?
在Django Rest Framework中,有这个列表中的认证方法,还有类似于django-rest-auth中的社交认证(如Twitter认证)的选项。
就我个人而言,我喜欢会话认证,因为它很容易使用,无需考虑太多。但是,如果团队开发过程中出现了糟糕的情况,会话认证可能会引起火药味,所以也许基本认证更方便一些。不过,应当注意的是,当然需要推荐使用HTTPS加密来保护安全。
这个认证相关的问题本身就是团队开发中的一个火药桶吧?
积压的工作/积压的项目/滞后的任务
这个状态的数据可以在该仓库的发布版本v0.1.6中找到。
代码库 de repositorio)
目录
Django Rest Framework 2.x 的教程(0)
Django Rest Framework 2.x 的教程(1)
Django Rest Framework 2.x 的教程(2)
Django Rest Framework 2.x 的教程(3)
Django Rest Framework 2.x 的教程(4)
Django Rest Framework 2.x 的教程(5)
Django Rest Framework 2.x 的教程(6)