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')),
]
Django(72)Django认证系统库--djoser的更多相关文章
- Django组件之认证系统
Django自带的用户认证 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Dja ...
- Django Rest Framework(认证、权限、限制访问频率)
阅读原文Django Rest Framework(认证.权限.限制访问频率) django_rest_framework doc django_redis cache doc
- django的forms认证组件
django的forms认证组件 每个网站的注册界面都需要有相应的"认证"功能,比如说认证注册页面的用户名是否已被注册,二次输入的密码是否一致以及认证用户输入的用户名.邮箱.手机号 ...
- django自定义user认证系统
第一种,彻底推翻django的user认证系统,重新定义我们想要的字段 from django.contrib.auth.models import AbstractBaseUser,Permissi ...
- Django集成OpenLDAP认证
本文详细介绍了django-auth-ldap的使用方法,参数含义,并提供了示例代码 版本说明 Django==2.2 django-auth-ldap==1.7.0 集成过程 Django集成LDA ...
- python 全栈开发,Day79(Django的用户认证组件,分页器)
一.Django的用户认证组件 用户认证 auth模块 在进行用户登陆验证的时候,如果是自己写代码,就必须要先查询数据库,看用户输入的用户名是否存在于数据库中: 如果用户存在于数据库中,然后再验证用户 ...
- 深入一下Django的用户认证和cache
深入一下Django的用户认证和cache 用户认证 首先明白一个概念,http协议是无状态的,也就是每一次交互都是独立的,那如何让服务器和客户端进行有状态的交互呢,现在较为常见的方法就是让客户端在发 ...
- django之auth认证系统
Django自带的用户认证 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Djang ...
- COOKIE与SESSION、Django的用户认证、From表单
一.COOKIE 与 SESSION 1.简介 1.cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. ...
随机推荐
- Linux下运行bash脚本显示“: /usr/bin/env: "bash\r": 没有那个文件或目录
用 ./ 运行bash脚本文件出现 报错信息 /usr/bin/env: "bash\r": 没有那个文件或目录 错误原因:这主要是因为bash后面多了\r这个字符的原因.在lin ...
- python-引用/模块
导入文件,先从当前目录下找,找不到从环境变量中找 1.导入模块,实质是把制定的py文件执行一遍. 自己写的模块:要导入的文件在当前目录下的:form 文件夹.py文件名 import 函数名 标准模块 ...
- HDU 6170 FFF at Valentine(强联通缩点+拓扑排序)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6165 题意:给你一个无环,无重边的有向图,问你任意两点,是否存在路径使得其中一点能到达另一点 解析:强 ...
- Spring Native实战(畅快体验79毫秒启动springboot应用)
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 知乎vscode插件修改和重新编译
需求来源 vscode插件修改代码要怎样重新编译并安装到vscode中? 起源于我使用一个vscode插件,它可以在vscode中发布文章到知乎上,然后我修改了插件的部分源代码,希望在vscode中安 ...
- jquery动态生成dom(比如append)导致js事件无效
如果无效用这个方法: on() 方法在被选元素及子元素上添加一个或多个事件处理程序. <div id="zkdiv"> <input type="bu ...
- Shell系列(38)- 数组操作→取值、遍历、替换、删除
引言 在Linux平台上工作,我们经常需要使用shell来编写一些有用.有意义的脚本程序.有时,会经常使用shell数组.那么,shell中的数组是怎么表现的呢,又是怎么定义的呢?接下来逐一的进行讲解 ...
- Jmeter系列(9)- Linux环境安装之安装JDK
step-1下载安装包 下载Linux环境下的jdk1.8,请去(官网)中下载jdk的安装文件:或者评论区留言 step-2解压到/usr/local目录 mkdir /usr/local/java ...
- jmeter之命令行执行jmx脚本
使用界面执行不稳定,且保存报告非常麻烦 https://www.jb51.net/article/191367.htm 作者:Anthony_tester 来源:CSDN 原文:https://blo ...
- pyqt5设计无边框窗口(一)
import sys from PyQt5 import QtGui,QtCore from PyQt5 import QtCore, QtGui, QtWidgets ############### ...