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',
),
}

最后执行迁移命令,迁移authauthtoken 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')),
]

Django(72)Django认证系统库--djoser的更多相关文章

  1. Django组件之认证系统

      Django自带的用户认证 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Dja ...

  2. Django Rest Framework(认证、权限、限制访问频率)

    阅读原文Django Rest Framework(认证.权限.限制访问频率) django_rest_framework doc django_redis cache doc

  3. django的forms认证组件

    django的forms认证组件 每个网站的注册界面都需要有相应的"认证"功能,比如说认证注册页面的用户名是否已被注册,二次输入的密码是否一致以及认证用户输入的用户名.邮箱.手机号 ...

  4. django自定义user认证系统

    第一种,彻底推翻django的user认证系统,重新定义我们想要的字段 from django.contrib.auth.models import AbstractBaseUser,Permissi ...

  5. Django集成OpenLDAP认证

    本文详细介绍了django-auth-ldap的使用方法,参数含义,并提供了示例代码 版本说明 Django==2.2 django-auth-ldap==1.7.0 集成过程 Django集成LDA ...

  6. python 全栈开发,Day79(Django的用户认证组件,分页器)

    一.Django的用户认证组件 用户认证 auth模块 在进行用户登陆验证的时候,如果是自己写代码,就必须要先查询数据库,看用户输入的用户名是否存在于数据库中: 如果用户存在于数据库中,然后再验证用户 ...

  7. 深入一下Django的用户认证和cache

    深入一下Django的用户认证和cache 用户认证 首先明白一个概念,http协议是无状态的,也就是每一次交互都是独立的,那如何让服务器和客户端进行有状态的交互呢,现在较为常见的方法就是让客户端在发 ...

  8. django之auth认证系统

    Django自带的用户认证 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Djang ...

  9. COOKIE与SESSION、Django的用户认证、From表单

    一.COOKIE 与 SESSION 1.简介 1.cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. ...

随机推荐

  1. 分组密码(三)DES 算法— 密码学复习(六)

    在介绍完Feistel结构之后,接下来进入到著名的DES算法. 6.1 DES算法的意义 在正式介绍DES之前,首先介绍几个重要的历史时间节点. ① 1973年,美国国家标准局(NBS)向社会公开征集 ...

  2. 本地文件名大写,提交到git仓库后变成了小写

    输入改命令即可: git config core.ignorecase false

  3. Orchard Core 简介

    Orchard Core 是基于ASP.NET Core 对Orchard CMS的 二次开发. Orchard Core由两部分组成: Orchard Core Framework: 一个基于ASP ...

  4. php socket 发送http请求 GET POST

    http://docs.php-http.org/en/latest/httplug/users.html <?php /** * Created by PhpStorm. * User: Mc ...

  5. 使用jemeter构造各种变量数据

    使用手动创建测试数据太麻烦,因此考虑用jmeter写了一些创建测试数据的脚本,针对那些变量非固定的数据可以利用函数来实现 通过函数助手添加各种变量数据 Tools--->函数助手 1:生成当前时 ...

  6. lua自写限制并发访问模块

    注意:ngx.say跟ngx.exit是不可以共存,否则会出现ngx.exit无法正常执行 1.定义lua共享内存20m lua_shared_dict ceshi 20m; 2.再location ...

  7. Python守护线程简述

    thread模块不支持守护线程的概念,当主线程退出时,所有的子线程都将终止,不管它们是否仍在工作,如果你不希望发生这种行为,就要引入守护线程的概念. threading模块支持守护线程,其工作方式是: ...

  8. P4022-[CTSC2012]熟悉的文章【广义SAM,dp,单调队列】

    正题 题目链接:https://www.luogu.com.cn/problem/P4022 题目大意 给出\(m\)个模板串. 然后\(n\)次询问给出一个串\(S\)要求找到一个最大的\(L\)使 ...

  9. P3235-[HNOI2014]江南乐【整除分块,SG函数】

    正题 题目链接:https://www.luogu.com.cn/problem/P3235 题目大意 \(T\)组游戏,固定给出\(F\).每组游戏有\(n\)个石头,每次操作的人可以选择一个数量不 ...

  10. python OSError: [Errno 22] Invalid argument: '\u202aF://text

    windows10 python3 读文件的时候报的错误 原因不明时好时坏很头疼但又没办法不知道怎么解决,网上的说法都不能解决,