djoser是什么?
作用:
Django
认证系统的
REST
实现。
djoser
库提供了一组
Django Rest Framework
视图,用于处理注册、登录、注销、密码重置和帐户激活等基本操作。它适用于自定义用户模型。
djoser
并没有重写
Django
代码(例如
PasswordResetForm
),而是重新实现了一些东西,以更好地适应单页应用程序体系结构。
环境准备与安装
支持的python版本
- Python 3.5
- Python 3.6
- Python 3.7
- Python 3.8
支持的Django版本
- Django 1.11
- Django 2.2
- Django 3.1
支持的drf版本
- Django Rest Framework 3.9
- Django Rest Framework 3.10
- Django Rest Framework 3.11
支持的身份验证后端
- 基于drf的身份认证Token
- 基于
django-rest-framework-simplejwt
的JWT认证
可用端点
- /users/
- /users/me/
- /users/confirm/
- /users/resend_activation/
- /users/set_password/
- /users/reset_password/
- /users/reset_password_confirm/
- /users/set_username/
- /users/reset_username/
- /users/reset_username_confirm/
- /token/login/ (Token Based Authentication)
- /token/logout/ (Token Based Authentication)
- /jwt/create/ (JSON Web Token Authentication)
- /jwt/refresh/ (JSON Web Token Authentication)
- /jwt/verify/ (JSON Web Token Authentication)
安装
pip install -U djoser
如果你打算使用JWT认证,你还需要安装下面的包
pip install -U djangorestframework_simplejwt
最后,如果您打算使用基于第三方的身份验证,例如
,则需要安装社交身份验证应用程序
django
,其中包括:
pip install -U social-auth-app-django
配置信息
在
INSTALLED_APPS
里添加如下代码:
INSTALLED_APPS = (\'django.contrib.auth\',(...),\'rest_framework\',\'djoser\',(...),)
在
urls.py
中添加如下代码
urlpatterns = [(...),url(r\'^auth/\', include(\'djoser.urls\')),]
官网上强调了:默认情况下,
HTTP Basic Auth
验证策略采用
Django Rest Framework
。并且强烈反对且不提供任何对
basic auth
的明确支持。我们应该按照“身份验证后端”中的说明来自定义身份验证后端。
测试程序
该库还提供了一个独立的测试应用程序,让我们了解基本的工作方式。在将
djoser
集成到后端应用程序之前,我们有必要去了解下
接下来我们会模拟最简单的流程:注册用户、登录和注销。
环境准备
克隆git上的项目,并且在虚拟环境中安装djoser
git clone git@github.com:sunscrapers/djoser.git
克隆完项目的目录如下:安装项目中的依赖包(虚拟环境用的poetry)
poetry install
安装完成后,cd到testproject目录中,执行迁移命令
python manage.py migrate
最后直接通过pycharm启动项目,环境就算准备好了
创建用户
使用接口测试工具
postman
或者其他工具,输入url和data,就能访问接口了可以看到我们已经成功创建了一个id为2的用户
未登录查询用户信息
刚才我们只是创建了一个新用户,但是没有进行登录操作,此时我们去查用户信息,肯定是不行的正如我们所看到的,我们无法在不登录的情况下访问用户配置文件。
用户登录
我们访问用户登录接口,就可以返回一个
token
登录后查询用户信息
然后我们在
headers
中添加
Authorization
,对应的值为
Token 刚刚返回的token值
,注意中间要有一个空格之后我们再访问查询用户信息接口,就能正确返回用户信息了
退出登录
最后访问退出登录接口,就可以退出登录了
退出后再查询用户信息
当我们退出登录后,再次用之前的token去查询用户信息后就会报错
身份验证后端
djoser有基于以下两种的认证方式
- Token Based Authentication
- JSON Web Token Authentication
Token Based Authentication使用方式
在
INSTALLED_APPS
中添加
rest_framework.authtoken
INSTALLED_APPS = [\'django.contrib.auth\',(...),\'rest_framework\',\'rest_framework.authtoken\',\'djoser\',(...),]
然后在
urls.py
配置路径
urlpatterns = [url(r\'^auth/\', include(\'djoser.urls.authtoken\')),]
再在
settings.py
中的
REST_FRAMEWORK
配置中添加
rest_framework.authentication.TokenAuthentication
REST_FRAMEWORK = {\'DEFAULT_AUTHENTICATION_CLASSES\': (\'rest_framework.authentication.TokenAuthentication\',),}
最后执行迁移命令,迁移
auth
和
authtoken apps
:
python manage.py migrate
JSON Web Token Authentication
在
settings.py
中的
REST_FRAMEWORK
配置中添加
rest_framework_simplejwt.authentication.JWTAuthentication
REST_FRAMEWORK = {\'DEFAULT_AUTHENTICATION_CLASSES\': (\'rest_framework_simplejwt.authentication.JWTAuthentication\',(...)),}
然后配置django-rest-framework-simplejwt使用授权时的请求头中的请求标识,格式为:
JWT <access_token>
,配置信息如下:
SIMPLE_JWT = {\'AUTH_HEADER_TYPES\': (\'JWT\',),}
最后在
urls.py
配置路径
urlpatterns = [(...),url(r\'^auth/\', include(\'djoser.urls\')),url(r\'^auth/\', include(\'djoser.urls.jwt\')),]