Django如何使用jwt获取用户信息

yizhihongxing

使用JWT获取用户信息是在Django Web应用开发中非常常见的需求之一。下面是使用Django和JWT实现获取用户信息的完整攻略:

1. 安装依赖

首先,我们需要安装Django和PyJWT依赖,其中,PyJWT是用于实现JWT的Python库:

pip install django
pip install pyjwt

2. 配置settings.py

在Django项目的settings.py文件中,需要加入以下配置:

INSTALLED_APPS = [
    # ...
    'rest_framework',
    'rest_framework_jwt'
]

MIDDLEWARE = [
    # ...
    'corsheaders.middleware.CorsMiddleware',
]

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
    ),
}

JWT_AUTH = {
    'JWT_VERIFY_EXPIRATION': True,
    'JWT_ALLOW_REFRESH': True,
    'JWT_REFRESH_EXPIRATION_DELTA': timedelta(days=7),
    'JWT_AUTH_HEADER_PREFIX': 'Bearer',
}

上面的配置将在REST框架中启用JWT身份验证,并将JWT身份验证作为默认身份验证类。其中包括对令牌到期的验证、刷新令牌的实现、指定JWT前缀等设置。

3. 编写views代码

我们在views.py中创建一个视图,来演示如何使用JWT获取用户信息:

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework_jwt.authentication import JSONWebTokenAuthentication
from rest_framework.permissions import IsAuthenticated


class UserDetailView(APIView):

    authentication_classes = (JSONWebTokenAuthentication,)
    permission_classes = (IsAuthenticated,)

    def get(self, request):

        user = request.user
        user_info = {
            'id': user.id,
            'username': user.username,
            'email': user.email
        }

        return Response(user_info)

上述的代码实现了用户信息获取的视图,使用JSONWebTokenAuthentication进行身份验证,IsAuthenticated进行权限控制,当用户携带有效的JWT token访问该视图时,将返回该用户信息的JSON格式数据。

在上面的代码片段中,使用了request.user获取当前用户信息,并将信息封装到字典类型的数据中,然后以JSON格式数据进行返回。

4.测试

开始测试,在浏览器中,输入http://127.0.0.1:8000/users/1/,将返回用户信息,即如下的JSON格式数据:

{
    "id": 1,
    "username": "user1",
    "email": "user1@example.com"
}

示例2

class UserLoginView(APIView):
    throttle_classes = ()
    permission_classes = [AllowAny]

    def post(self, request):
        serializer = UserLoginSerializer(data=request.data, context={'request': request})
        serializer.is_valid(raise_exception=True)
        user = serializer.validated_data['user']
        token = serializer.validated_data['token']
        user_info = {
            'id': user.id,
            'username': user.username,
            'email': user.email,
            'token': token
        }
        return Response(user_info)

上述示例2实现了用户登录的代码,这里使用了自定义的UserLoginSerializer对用户名和密码进行验证,然后生成JWT token返回给客户端,同时返回用户信息。

总结

通过本攻略的步骤,我们成功的使用Django和JWT实现了用户信息获取和登录功能。其实,当你在开发Django Web应用时,你会发现JWT非常适合用于API的身份验证和身份验证服务,这里只是做了基础的介绍,更为灵活的使用方式可以根据自己的需要进行调整。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django如何使用jwt获取用户信息 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • Django中外键ForeignKey介绍使用

    当我们在Django中定义模型时,我们可以使用外键(ForeignKey)来实现模型之间的关系。 一、什么是外键 外键是指一个表中的字段引用了另一个表的主键作为自己的值。 在Django中,外键是一个模型字段,用于关联另一个模型的主键,实现模型之间的关系。外键字段在数据库中存储的是被关联模型的主键值。 二、使用外键 在Django中,使用外键需要定义一个Fo…

    人工智能概览 2023年5月25日
    00
  • Django 自定义404 500等错误页面的实现

    下面详细讲解一下 Django 自定义404、500等错误页面的实现。 1. 修改默认的错误页面 Django 默认的错误页面位于 templates 目录下的 error 目录中,其中包括了: 500.html:500 Internal Server Error 错误页面 404.html:404 Not Found 错误页面 403.html:403 F…

    人工智能概论 2023年5月25日
    00
  • jupyter notebook tensorflow打印device信息实例

    下面是“jupyter notebook tensorflow打印device信息实例”的完整攻略。 介绍 Jupyter Notebook是一种交互性强、可重复性强、方便数据科学研究开发和可视化的工具,而TensorFlow是当前使用最广泛的深度学习框架之一,两者结合使用可以方便我们进行深度学习任务的开发和可视化。在进行TensorFlow开发时,了解我们…

    人工智能概论 2023年5月24日
    00
  • Django 设置admin后台表和App(应用)为中文名的操作方法

    Django 是一个非常流行的 Python Web 框架,其中自带的 admin 后台管理系统可以帮助我们快速构建一个管理数据的页面。本篇攻略将会介绍如何设置 Django admin 后台表和 App(应用)为中文名。 1. 为 Admin 后台表设置中文名 我们可以继承 Django 自带的 ModelAdmin 类来对 admin 后台表进行定制。在…

    人工智能概论 2023年5月25日
    00
  • 基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析

    基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析 书店案例分析的实现,我们将使用Node.js作为编写后端服务器的JavaScript运行时,MongoDB作为数据存储和检索的数据库,AngularJS和Bootstrap框架作为前端实现工具。 步骤一:在个人电脑上安装与配置上述所需软件(以windows系统为例)。 …

    人工智能概论 2023年5月25日
    00
  • java网上图书商城(7)订单模块2

    Java网上图书商城(7)订单模块2 本文是Java网上图书商城项目的第七篇文章,介绍订单模块的第二部分,包括订单结算、支付和发货等流程。 订单结算 当用户选择要购买的商品后,需要进行结算,这部分可以使用第三方支付平台,比如支付宝、微信支付等。在项目中,我们可以通过调用相应的API完成结算过程。 示例:用户A选择了一本10元的图书,想要使用支付宝进行付款。在…

    人工智能概论 2023年5月24日
    00
  • SQL写法–行行比较

    当我们需要查询一个表中的某几行数据时,一种常用的方法是使用WHERE子句进行筛选。但是当筛选条件较多时,使用WHERE子句会显得很冗长,这时使用“行行比较”的SQL写法就能派上用场了。 “行行比较”即是将每行的数据写成一条完整的SELECT语句,然后将它们通过UNION ALL组合起来。这样做的好处是,每行数据都可以使用独立的SELECT语句进行条件筛选,非…

    人工智能概览 2023年5月25日
    00
  • Django User 模块之 AbstractUser 扩展详解

    Django User 模块之 AbstractUser 扩展详解 在Django中,用户认证是一个非常重要的模块。Django提供了一套完整的用户认证系统,包括用户注册、登录、密码重置等功能。我们可以通过继承Django提供的User模型来创建自定义用户模型,并添加自定义字段来扩展Django提供的默认用户模型。而继承 AbstractUser 会比继承 …

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部