IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> DRF 用户认证 -> 正文阅读

[Python知识库]DRF 用户认证

验证方式:

BasicAuthentication:基础验证,通过用户名和密码验证

SessionAuthentication:使用django的session验证

TokenAuthentication:token认证

可设置多个验证方式,有一个通过即可。验证通过后request.user会是对应User实例

权限策略:

AllowAny:没有限制

IsAuthenticated:已认证

其他权限策略:DRF权限

光设置验证是没用的,还的设置权限。才能起到必须登录才能操作。

全局配置

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.TokenAuthentication',
    ),
}

单独配置:

    authentication_classes = []
    permission_classes = [AllowAny]

也可以单独使用,可以覆盖全局配置。比如注册,登录肯定不需要进行验证。

SessionAuthentication:

?

?需要在INSTALLED_APPS和MIDDLEWARE中进行配置。然后使用python manage.py migrate创建数据库表,默认是使用数据库保存session。

        login_info = {
            "username": data.get("username"),
            "password": data.get("password"),
        }
        try:
            user = authenticate(**login_info)
            if user is not None:
                login(request, user)

使用authenticate()校验用户名密码,使用login()方法创建session。

Django_session表会增加一条该用户的session记录

??在请求头中使用

使用SessionAuthentication可能会提示"detail":?"CSRF?Failed:?CSRF?token?missing." DRF默认是启用CSRF的。

?

把CSRF校验设置成True,然后注册到中间件。

from django.utils.deprecation import MiddlewareMixin
class NotUseCsrfTokenMiddlewareMixin(MiddlewareMixin):
    def process_request(self, request):
        setattr(request, '_dont_enforce_csrf_checks', True)

?

logout(request)

该方法可删除session

TokenAuthentication:

需要在INSTALLED_APPS中注册,然后执行python manage.py migrate

?

        login_info = {
            "username": data.get("username"),
            "password": data.get("password"),
        }
        try:
            user = authenticate(**login_info)
            if user is not None:
                login(request, user)
                token, created = Token.objects.get_or_create(user=user)
                return SuccessResponse(data={"token": token.key})
        except Exception as e:
            return ErrorResponse(msg=str(e))
token, created = Token.objects.get_or_create(user=user)

token.key 可以获取对应token的值

?authtoken_token表会增加一条该用户的token记录

?

?在请求头中使用Authorization参数,Token后要空两格再跟上具体值

    def post(self, request):
        try:
            Token.objects.filter(user=request.user).delete()
            logout(request)
        except ObjectDoesNotExist as e:
            return ErrorResponse(msg=str(e))
        return SuccessResponse()

退出登录,直接将token删除即可,如果同时使用session。删除session的操作需要放在删除token后面?(放前面会报错,不知道是不是都这样,还是我的代码会这样)

修改默认错误格式:

默认的错误只有一句detail,无法自定义格式。比如我想在没有登录的时候code返回2,其他错误code返回1来区分是否需要跳转登录。

from rest_framework.views import exception_handler
def custom_exception_handler(exc, context):
    # Call REST framework's default exception handler first,
    # to get the standard error response.
    response = exception_handler(exc, context)
    # Now add the HTTP status code to the response.
    if response is not None:
        message = response.data.get('detail')
        if message == '身份认证信息未提供。':
            response.data['code'] = 2
        else:
            response.data['code'] = 1
        response.data['msg'] = message
        response.data['data'] = None
        # 删除detail字段
        del response.data['detail']
    
    return response
    'EXCEPTION_HANDLER': (
        'Common.common.custom_exception_handler'
    )

需要在REST_FRAMEWORK中增加。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:07:23  更:2022-09-04 01:11:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 13:43:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计