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 [email protected]: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\')),]
爱站程序员基地


