Django实现接口自动化平台(二)认证授权【持续更新中】

news2024/11/23 11:13:36

上一章:

Django实现接口自动化平台(一)日志功能【持续更新中】_做测试的喵酱的博客-CSDN博客

下一章:

一、认证与授权配置

1、认证:获取权限的方式
2、授权:通过认证之后,可以获取哪些权限

通过APIVIew实现认证与授权。

APIVIew源码:

class APIView(View):

    # The following policies may be set at either globally, or per-view.
    renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES
    parser_classes = api_settings.DEFAULT_PARSER_CLASSES
    authentication_classes = api_settings.DEFAULT_AUTHENTICATION_CLASSES
    throttle_classes = api_settings.DEFAULT_THROTTLE_CLASSES
    permission_classes = api_settings.DEFAULT_PERMISSION_CLASSES
    content_negotiation_class = api_settings.DEFAULT_CONTENT_NEGOTIATION_CLASS
    metadata_class = api_settings.DEFAULT_METADATA_CLASS
    versioning_class = api_settings.DEFAULT_VERSIONING_CLASS

3、常用的认证机制:

  • Session认证
  • Token认证 

Session认证特点:

  • 保持在服务端,消耗服务器性能
  • 分布式架构中,难以维持Session会话同步
  • CSRF攻击风险

Token认证 :

  • 保存在客户端
  • 跨平台、跨语言
  • 拓展性强
  • 鉴权性能高

1.1 配置项目的认证与授权

在setting.py文件中,

REST_FRAMEWORK = {


    # 指定使用的认证类
    # a.在全局指定默认的认证类(指定认证方式)
    'DEFAULT_AUTHENTICATION_CLASSES': [
        # b.Session会话认证
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication'
    ],
    # 指定使用的权限类
    # a.在全局指定默认的权限类(当认证通过之后,可以获取何种权限)
    'DEFAULT_PERMISSION_CLASSES': [
        # AllowAny不管是否有认证成功,都能获取所有权限
        # IsAdminUser管理员(管理员需要登录)具备所有权限
        # IsAuthenticated只要登录,就具备所有权限
        # IsAuthenticatedOrReadOnly,如果登录了就具备所有权限,不登录只具备读取数据的权限
        'rest_framework.permissions.IsAuthenticatedOrReadOnly',
    ],
}

1、指定使用的认证类
  在全局指定默认的认证类(指定认证方式)
 

  'DEFAULT_AUTHENTICATION_CLASSES': [
        # b.Session会话认证
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication'
    ],


2、指定使用的权限类
在全局指定默认的权限类(当认证通过之后,可以获取何种权限)

    'DEFAULT_PERMISSION_CLASSES': [
        # AllowAny不管是否有认证成功,都能获取所有权限
        # IsAdminUser管理员(管理员需要登录)具备所有权限
        # IsAuthenticated只要登录,就具备所有权限
        # IsAuthenticatedOrReadOnly,如果登录了就具备所有权限,不登录只具备读取数据的权限
        'rest_framework.permissions.IsAuthenticatedOrReadOnly',
    ],
  1.  AllowAny不管是否有认证成功,都能获取所有权限
  2.  IsAdminUser管理员(管理员需要登录)具备所有权限
  3.  IsAuthenticated只要登录,就具备所有权限
  4.  IsAuthenticatedOrReadOnly,如果登录了就具备所有权限,不登录只具备读取数据的权限

二、配置数据库

在settings.py 文件中,DATABASES 配置数据库信息

DATABASES = {
    'default': {
        # mysql数据库的引擎
        'ENGINE': 'django.db.backends.mysql',
        # 数据库的名称,需要连接mysql下具体某一个数据库的名称
        'NAME': 'my_django',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

具体的数据库配置方式,参考:

django ORM框架(操作数据库)第一章_做测试的喵酱的博客-CSDN博客

三、初始化用户系统

1、生成迁移脚本

python manage.py makemigrations

2、执行迁移脚本

python manage.py makemigrate

3、创建超级管理员

python manage.py createsuperuser

设置超级管理员的账号和密码。

四、可浏览api页面(登录路由配置)可忽略,不重要

1、在全局urls.py文件中设置登录路由


urlpatterns = [


    # 在全局路由表中添加rest_framework.urls子路由
    # a.rest_framework.urls提供了登录和登出功能(返回的是一个HTML页面,并不是接口)
    path('api/', include('rest_framework.urls'))
]

2、局setting.py文件中,注释掉csrf

五、用户模块

5.1 方式一:自定义Users模块

当Django自带用户模块,不能满足我们需要时,需要自自定义用户模块

这里我们使用自定义的user模块,需要继承系统自带的User模块。

1、创建users应用

python3 manage.py startapp users

2、注册users应用,在setting.py文件中,注册users

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'users'
]

3、自定义用户模块,继承User

from django.db import models
from django.contrib.auth.models import User


class UserModel(User):
    mobile = models.CharField(max_length=11)
    username = models.CharField()

4、在setting文件中,设置自定义用户模块

# 指定使用的用户模型类,默认为auth子应用下的User
AUTH_USER_MODEL = 'users.UserModel'

5.2  方式二:使用系统自带的User模块 

六、JWT类型的Token介绍 (简单了解)

原文地址:

https://www.cnblogs.com/crowbrother/p/14813754.html

JWT:Json Web Token 字符串

eyJhbGciOiI6IkRFRiJ9.eNqEj0GOhCAURO_ohbw8ZqUaEUDMe6F.2A2jGp9sAw-QdkOVmm_dfD6Q

一个JWT实际上就是一个字符串,它由三部分组成:header头部、playload载荷、sign签名。 

 6.1 header头部 

描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。表示成一个JSON对象,经base64编码形成第一部分。
例如:

{
  'typ': 'JWT', //类型
  'alg': 'HS256' //sign的加密算法
}

base64编码:eyJhbGciOiI6IkRFRiJ9

6.2 playload载荷

其实就是自定义的数据,一般存储用户Id,用户名、过期时间等信息。也就是JWT的核心所在,因为这些数据就是使后端知道此token是哪个用户已经登录的凭证。而且这些数据是存在token里面的,由前端携带,所以后端几乎不需要保存任何数据。
例如:

{
  'uid': '1234567', //用户编号
  'name': 'kobe', //用户名
  'exp': '20210526121212' //过期时间 
}

base64编码:eNqEj0GOhCAURO_ohbw8ZqUaEUDMe6F

6.3 sign签名

1.头部和载荷各自由base64加密后用 连接起来,然后就形成了xxx.yyy的前两段token。

2.最后一段token的形成:前两段字符串xxx.yyy 加入一个密钥用sha256算法或者其他算法加密形成不可逆的密文sign。

哈希算法生成的sign:2A2jGp9sAw-QdkOVmm_dfD6Q

pip install pyjwt

七、Django 使用jwt token

1、安装djangorestframework-jwt

pip install djangorestframework-jwt

2、在setting文件中,认证方式,增加jwt token认证

在全局路由表中添加obtain_jwt_token路由(可以使用用户名和密码进行认证)
        # 3)认证通过之后,在响应体中会返回token值
        # 4)将token值设置请求头参数,key为Authorization,value为JWT token值

REST_FRAMEWORK = {


    # 指定使用的认证类
    # a.在全局指定默认的认证类(指定认证方式)
    'DEFAULT_AUTHENTICATION_CLASSES': [
        # 1)指定使用JWT TOKEN认证类
        
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
        # b.Session会话认证
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication'
    ],

}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/588670.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【大数据分析】Hbase的基本原理

目录 Hbase 架构ClientZooKeeperMasterRegionServerHRegionStoreMemStoreStoreFileHFileHLog Hbase数据模型关于数据模型的其他概念Name SpaceTableRowColumnTime StampCell Hbase 架构 Client (1).META.表,记录了用户所有表拆分出来的 Regi…

ESP32设备驱动-TMP006 红外热电堆传感器驱动

TMP006 红外热电堆传感器驱动 文章目录 TMP006 红外热电堆传感器驱动1、TMP006介绍2、硬件准备3、软件准备4、驱动实现1、TMP006介绍 Texas Instruments 的 TMP006 是一系列温度传感器中的第一款,无需接触物体即可测量物体的温度。 它使用非常灵敏的热电堆来测量从物体表面发…

怎么给视频配音?视频配音软件有哪些?

视频配音在日常生活中被广泛应用,比如在电影解说、游戏解说、纪录片视频等领域,可以帮助创作者更好地表达自己的视频内容,提高视频的吸引力和感染力。很多小伙伴也想学习怎么给视频配音,但不清楚视频配音教程哪个好?没…

解密服务性能利器:Pyroscope让你的应用飞起来

开发人员通常需要查看生产应用程序中的性能瓶颈以确定问题的原因。为此,您通常需要可以通过日志和代码工具收集的信息。不幸的是,这种方法通常耗时,并且不能提供有关潜在问题的足够详细信息。 一种现代且更先进的方法是应用和使用分析技术和工…

Camunda如何利于性能指标优化流程性能

Camunda 提供了一系列性能指标,以帮助用户评估和优化其业务流程的性能。以下是 Camunda 提供的一些常见性能指标: 1、流程执行时间(Process Execution Time):指从流程实例启动到完成的时间。 2、流程实例数&#xff…

共同成长 合力致远,就在2023亚马逊云科技合作伙伴峰会

在云计算蓬勃发展的今天,在推动业务发展、实现共赢的过程中,价值成就,是亚马逊云科技对合作伙伴自始至终的承诺。为助力合作伙伴成就价值,共建成长路径,2023亚马逊云科技合作伙伴峰会将于6月27日在上海世博中心重磅启幕…

好选客浅谈鞋靴行业找外贸客户~

鞋靴概述 鞋靴制品是指使用各种材料(如:皮革、布料、橡胶、塑料等)制作的款式、类型、功能各异的鞋子和靴子,包括日常通勤的休闲鞋、提供舒适的缓震和支撑的运动鞋与适用于正式场合的皮鞋和高跟鞋等,在保护脚部、提供…

Ubuntu18.04安装Autoware.ai 1.14 GPU版

硬件: CPU:i7-9700 显卡:GTX 1050 Ti 1-安装ROS 2-安装显卡驱动 1-删除旧版显卡驱动 sudo apt-get remove --purge nvidia*2-查看可供安装的驱动 sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt-get update sudo apt-get …

期货黄金交易平台哪个最可靠?如何选择?

在期货黄金交易中,期货黄金交易平台是否可靠?如何才能快速筛选出可靠的黄金交易平台?对投资者来说都是很重要的。 期货黄金交易平台要保障用户资金安全 资金的安全性方面要求平台受到严格监管,最好是受多国监管的,这样…

低代码平台产品排行榜揭晓:这些产品值得你选择和使用

低代码平台改变了软件开发的方式。它不需要开发团队从头开始创建应用程序,而是允许用户在几乎没有编码知识的情况下构建自定义应用程序。这些平台为需要定制软件解决方案但没有预算或时间聘请开发团队的企业提供了一种简单且经济高效的解决方案。而在本文中&#xf…

抖音搜索/抖音下拉词/抖音seo/抖音关键词排名系统开发

为了优化抖音平台上的内容,开发抖音关键词排名系统成为了必要的措施。该系统可以针对搜索结果和下拉词进行分析,为用户提供更准确的搜索结果。为实现这一目标,开发团队进行了大量的市场调查和用户研究。 在开发过程中,团队利用了…

【来不及刷题之】32、编辑距离(动态规划)

明确dp函数的🍓💗👉定义dp(s1,s2,i,j ):s1[0…i]变成s2[0…j]的最小编辑距离选择:对于每一个位置,s1可以:不做任何操作(在相等时),删除,在后一个位…

PMP适合哪些人去考?

从技术向管理转型的工程技术人员:对于那些在职业生涯中转向项目管理的技术人员,PMP证书提供了必要的桥梁,使他们能够掌握项目管理的基本原理和最佳实践。 缺乏系统项目管理理论知识的项目经理:大部分项目经理都是技术出身&#x…

【OneNet】| stm32+esp8266-01s—— OneNet初体验 | 平台注册及设备创建 | demo使用

系列文章目录 失败了也挺可爱,成功了就超帅。 文章目录 前言1. OneNet平台注册2. 创建多协议接入设备3. 硬件连接4. 下载并运行Demo4.1 Demo下载4.2 运行Demo本小节结束 前言 最近准备耍下 Onenet平台 。下载了官方demo 遇到几个问题 1、创建接入设备 因为平台网页…

【LeetCode】5,最长回文子串。 难度等级:中等。解法很多,值得推敲。

文章目录 一、题目二、我的解答:双指针从头开始遍历2.1 暴力循环:超出时间限制2.2 优化后的暴力循环:虽然没有超时,但效率很低 三、双指针中心扩散法(从字符串中心开始遍历)四、动态规划法4.1 我的错误解答…

HTML+CSS实训——Day06——发现页的用JavaScript修改

仓库链接:https://github.com/MengFanjun020906/HTML_SX 前言 昨天学习了javascript的一些知识点&#xff0c;今天要学习dom的操作了&#xff0c;也就是文档对象模型的操作。 dom操作 <body><div id"i1">这是一个div</div><script>// dom…

一次redis主从切换导致的数据丢失与陷入只读状态故障

背景 最近一组业务redis数据不断增长需要扩容内存&#xff0c;而扩容内存则需要重启云主机&#xff0c;在按计划扩容升级执行主从切换时意外发生了数据丢失与master进入只读状态的故障&#xff0c;这里记录分享一下。 业务redis高可用架构 该组业务redis使用的是一主一从&am…

Spring Boot 如何实现邮件发送

Spring Boot邮件发送 在现代的Web应用程序中&#xff0c;邮件通知已经成为了一项非常重要的功能。例如&#xff0c;在用户注册、密码重置、订单确认等方面&#xff0c;我们通常都会使用邮件来通知用户。在Spring Boot应用程序中&#xff0c;我们可以使用JavaMailSender来实现邮…

2022年长三角高校数学建模竞赛A题学在长三角解题全过程文档及程序

2022年长三角高校数学建模竞赛 A题 学在长三角 原题再现&#xff1a; 长三角高等教育规模和优质高等教育资源数量处于全国领先水平。从 2019年和 2013-2019 年的平均值来看&#xff0c;长三角地区人口数量在全国占比分别是 16.22&#xff05;和 16.10&#xff05;&#xff0c…

在Css上吃过的亏

一、前言 最近参加了公司的一个小程序的开发项目&#xff0c;虽然很简单&#xff0c;但是非常急三天就要交。本来就是实习生加上前端不熟练的我&#xff0c;最终在Css定位上吃了很大的亏。今天就来了解一下Css中的几个定位。 二、什么是定位 在Css中有一个position属性&…