djangorestframework-simplejwt入门教程

系统管理员 2023-01-21 05:24 158阅读 0赞

djangorestframework-simplejwt入门教程

文章目录

  • djangorestframework-simplejwt入门教程
    • 环境说明
    • 安装
    • 配置settings.py
      • 在 `INSTALLED_APPS` 中注册
      • 配置 `DRF`
      • 配置 `simplejwt`
    • 编写路由 urls.py
    • 创建数据库并添加用户
    • 运行项目并查看效果
      • 获取Token
      • 验证Token
      • 刷新Token
    • Postman请求方式
      • 获取Token
      • 自定义的视图
    • 开始新的征程

环境说明


























环境 版本
Python 3.6.8
Django 3.1
djangorestframework (DRF) 3.12.4
djangorestframework-simplejwt 4.4.0

注意:是djangorestframework-simplejwt不是djangorestframework-jwt,后者已停止维护。

约定:

  • djangorestframework 本文后续统一称为: DRF
  • djangorestframework-simplejwt本文后续统一称为simplejwt

安装

simplejwtDRF的插件,所以安装之前需要先安装DRF

  1. pip install djangorestframework
  2. pip install markdown
  3. pip install django-filter
  4. # 下面安装 simplejwt
  5. pip install djangorestframework-simplejwt

配置settings.py

INSTALLED_APPS 中注册

  1. INSTALLED_APPS = [
  2. 'django.contrib.admin',
  3. 'django.contrib.auth',
  4. 'django.contrib.contenttypes',
  5. 'django.contrib.sessions',
  6. 'django.contrib.messages',
  7. 'django.contrib.staticfiles',
  8. # 自己的应用
  9. ...
  10. 'rest_framework', # 注册DRF应用
  11. ]

配置 DRF

  1. REST_FRAMEWORK = {
  2. 'DEFAULT_AUTHENTICATION_CLASSES': [
  3. 'rest_framework_simplejwt.authentication.JWTAuthentication', # 使用rest_framework_simplejwt验证身份
  4. 'rest_framework.authentication.SessionAuthentication',
  5. 'rest_framework.authentication.BasicAuthentication'
  6. ],
  7. 'DEFAULT_PERMISSION_CLASSES': [
  8. 'rest_framework.permissions.IsAuthenticated' # 默认权限为验证用户
  9. ],
  10. }

配置 simplejwt

  1. # simplejwt配置, 需要导入datetime模块
  2. SIMPLE_JWT = {
  3. # token有效时长
  4. 'ACCESS_TOKEN_LIFETIME': datetime.timedelta(minutes=30),
  5. # token刷新后的有效时间
  6. 'REFRESH_TOKEN_LIFETIME': datetime.timedelta(days=1),
  7. }

编写路由 urls.py

这里直接编写项目下的根路由文件

  1. from django.contrib import admin
  2. from django.urls import path, include
  3. # 导入 simplejwt 提供的几个验证视图类
  4. from rest_framework_simplejwt.views import (
  5. TokenObtainPairView,
  6. TokenRefreshView,
  7. TokenVerifyView
  8. )
  9. urlpatterns = [
  10. # Django 后台
  11. path('admin/', admin.site.urls),
  12. # DRF 提供的一系列身份认证的接口,用于在页面中认证身份,详情查阅DRF文档
  13. path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
  14. # 获取Token的接口
  15. path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
  16. # 刷新Token有效期的接口
  17. path('api/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
  18. # 验证Token的有效性
  19. path('api/token/verify/', TokenVerifyView.as_view(), name='token_verify'),
  20. ]

创建数据库并添加用户

  1. 执行模型变更命令初始化数据库

    python manage.py migrate

  2. 添加用户,直接生成超级用户

    python manage.py createsuperuser

然后按照步骤输入邮箱用户名和密码就可以了

运行项目并查看效果

浏览器打开http://127.0.0.1:8000/应该就能看到URL提示了,下面进入刚刚配置的url查看一下效果

获取Token

进入 http://127.0.0.1:8000/api/token/, 一切正常的话应该会看到DRF提供的页面,提示GET方法不被允许,并且下面有用户名和密码的输入框。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ygPU8R5j-1620982718776)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210514154143145.png)]

在输入库中输入刚刚创建的用户信息就能得到系统返回的信息了。返回的信息包括refreshaccess两个字段。其中refresh是用于刷新token的(每个Token都是有时间限制的,过了时间就生效了),access是用于后续的请求时验证身份的。

671071e702bb0e26e606e294e36fd387.png

验证Token

进入http://127.0.0.1:8000/api/token/verify/, 下面提示输入Token, 输入刚刚过去到的access的值,验证成功。注意,验证成功没有提示信息反悔,只有一个200的响应码

c72dca4451bc2bbbf2edd36ae975b8a1.png

如果验证失败,则响应码为401,且下方有提示信息

2b52939a492094319a9b423e0696bf5d.png

刷新Token

进入 http://127.0.0.1:8000/api/refresh/,下面提示填写refresh,在里面填写上面获取到的refresh值,如果填写的正确,则会获取到新的Token,否则会提示验证失败

d2f92879a2c1b93ac1971d1151aa14a7.png

Postman请求方式

上面的操作都是在DRF提供的页面里面进行的,实际使用的时候都是Ajax请求,下面讲解使用Postman进行请求的方法,以获取Token和自定义的视图

获取Token

在Postman中正常填写请求信息即可, 获取Token、刷新Token和验证Token都是直接填写即可

b10a7841465322195826747ee2de71be.png

自定义的视图

上面的三个Token相关的接口是插件提供的,内部已经做了配置,免身份认证,但是我们自己的接口是需要做身份校验的。我们先创建一个自定义的视图,然后在路由中注册。为了便于演示,这里直接在urls.py中创建视图,之后,我们完整的urls.py文件如下

  1. from django.contrib import admin
  2. from django.urls import path, include
  3. from rest_framework.views import APIView, Response
  4. # 导入 simplejwt 提供的几个验证视图类
  5. from rest_framework_simplejwt.views import (
  6. TokenObtainPairView,
  7. TokenRefreshView,
  8. TokenVerifyView
  9. )
  10. # 创建一个自定义的视图,仅实现get方法做测试
  11. class IndexView(APIView):
  12. def get(self, request):
  13. return Response('This is Index Page!', status=200)
  14. urlpatterns = [
  15. path('admin/', admin.site.urls),
  16. # DRF 提供的一系列身份认证的接口,用于在页面中认证身份,详情查阅DRF文档
  17. path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
  18. # 获取Token的接口
  19. path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
  20. # 刷新Token有效期的接口
  21. path('api/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
  22. # 验证Token的有效性
  23. path('api/token/verify/', TokenVerifyView.as_view(), name='token_verify'),
  24. # 自定义视图
  25. path('index/', IndexView.as_view(), name='index')
  26. ]

这里为了省事将视图写在了urls.py里面,实际开发请单独建立views.py,保持良好的代码风格

此时,我们使用Postman执行GET请求访问自定义接口为得到提示信息, 这就是在提示我们需要传递Token给后台认证了

ab776ff4a24572e10035f5a0e7a04e82.png

simplejwt的身份认证方式为:在请求的Headers里面里面添加设置参数,名称为:Authorization, 值是一个固定组成的字符串: Bearer +空格 + access, 例如:Bearer [token值]。 正确的效果如下

9d65c3f03e081050a62f90dd5bc4a781.png

开始新的征程

本文主要讲述了djangorestframework-simplejwt的使用入门,这里还有很多问题:

  1. 怎么将提示信息改为中文?
  2. 如何往获取Token的接口中添加自定义的响应数据,比如用户名,头像,权限码?
  3. 如何往playload中添加自定义的信息,比如用户手机号码?
  4. 怎么获取playload里面的信息?
  5. 注册接口不需要身份验证怎么跳过验证?

这些问题,下一篇带你解锁~

发表评论

表情:
评论列表 (有 0 条评论,158人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Mybatis入门教程

    本项目是建立在Maven项目基础上的,也可以建立java项目,[ mybatis-x.x.x.jar ][mybatis-x.x.x.jar]下载Jar包,将项目所需Jar包拷

    相关 awk 入门教程

    awk 入门教程 阮一峰 awk是处理文本文件的一个应用程序,几乎所有 Linux 系统都自带这个程序。 它依次处理文件的每一行,并读取里面的每一个字段。对于日志、CS

    相关 Mycat入门教程

    mycat介绍 介绍在官方网站上有比较详细的介绍,在这里复制粘贴没什么意思,大家到官网上看 [官网链接][Link 1] 前置条件 本教程是在wind