AI智能
改变未来

Django(72)Django认证系统库–djoser


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

最后,如果您打算使用基于第三方的身份验证,例如

facebook

,则需要安装社交身份验证应用程序

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\')),]
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Django(72)Django认证系统库–djoser