django rest framework 实现用户登录认证详解

yizhihongxing

下面我就为您详细讲解“django rest framework 实现用户登录认证详解”的完整攻略,包含两条示例说明。

一、什么是Django Rest Framework

Django Rest Framework是一个快速而灵活的Web框架,用于构建API。它使用了 Django 的优点,例如轻松的数据库管理、简单的URL路由、强大的视图和模板引擎,并将其与流行的API开发工具,例如认证和序列化器相结合。它可以让我们轻松地构建出易用且可扩展的RESTful API。

二、如何实现用户登录认证

在Django Rest Framework中实现基于Token的认证,可以按照以下步骤进行:

第一步:安装Django Rest Framework

在使用Django Rest Framework之前,需要先安装Django Rest Framework。可以使用pip命令进行安装:

pip install djangorestframework

第二步:创建Django项目

在安装完Django Rest Framework后,可以通过使用django-admin startproject命令创建一个新的Django项目。

django-admin startproject project_name

第三步:创建Django App

Django App是Django项目中的一个组件。通常,一个Django App是一个功能模块。

可以通过使用如下命令来创建一个Django App:

python manage.py startapp app_name

第四步:创建Django Rest Framework View

在Django Rest Framework中,视图(View)是处理HTTP请求并返回HTTP响应的代码段。Django Rest Framework提供了一些视图来帮助我们构建API。

在我们创建的Django App中,可以创建一个Django Rest Framework视图,代码如下:

from rest_framework.views import APIView
from rest_framework.response import Response

class HelloView(APIView):
    def get(self, request):
        content = {'message': 'Hello, World!'}
        return Response(content)

在上面的代码中,我们创建了一个继承自APIView的HelloView视图。这个视图中只有一个get方法,接受HTTP GET请求,并返回一个包含message字段的JSON响应。

第五步:配置Django Rest Framework路由

Django Rest Framework提供了与Django原生路由器相同的功能,我们可以使用Django的路由器来为我们的API添加路由。

在我们的Django项目的urls.py中添加Django Rest Framework的路由器,代码如下:

from django.urls import path, include
from rest_framework import routers
from app_name.views import HelloView

router = routers.DefaultRouter()
router.register(r'hello', HelloView, basename='hello')

urlpatterns = [
    path('', include(router.urls)),
]

在上面的代码中,我们首先导入Django Rest Framework的路由器routers,以及我们创建的视图HelloView。然后,我们创建了一个路由器实例router,并向其中注册了我们的新视图。最后,我们将Django Rest Framework的路由器包含在项目的urlpatterns中,这样就可以在URL中使用hello路径来访问我们的HelloView视图了。

第六步:使用Token进行认证

在Django Rest Framework中,Token认证是最简单和最常见的认证方式之一。Token是一种字符串,当用户登录时,系统为其生成一个Token,并将其保留在数据库中。当用户发送请求时,他们需要使用Token来进行认证。

实现基于Token的认证,需要按如下步骤进行:

第一步:在您的项目中启用Token认证。

为了使用Token认证,首先需要在Django Rest Framework的settings.py配置文件中启用Token认证。

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
    ],
}

在上面的代码中,我们将TokenAuthentication添加为默认的身份验证类。

第二步:为您的用户生成Token。

默认情况下,Django Rest Framework不为用户自动创建Token,因此我们需要手动为其生成。

from django.contrib.auth import get_user_model
from rest_framework.authtoken.models import Token

User = get_user_model()

def generate_token(user):
    token, _ = Token.objects.get_or_create(user=user)
    return token.key

username = 'user'  # 用户名
password = 'password'  # 密码

user = User.objects.create(username=username)
user.set_password(password)
user.save()

token = generate_token(user)

在上面的代码中,我们首先从Django的get_user_model()方法中获取user对象,并使用create()方法创建一个新的用户。然后,我们为该用户设置密码,并保存该用户到数据库中。最后,我们还定义了一个generate_token()函数,该函数接受一个用户对象,并返回与该用户相关联的Token对象的key。

第三步:使用Token进行认证。

现在就可以使用Token认证了。

在我们的视图中,可以通过如下方式使用Token进行认证:

from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import IsAuthenticated

class HiddenView(APIView):
    authentication_classes = [TokenAuthentication]
    permission_classes = [IsAuthenticated]

    def get(self, request):
        content = {'message': '您已登录!'}
        return Response(content)

在上面的代码中,我们定义了一个新视图,并定义了两个属性:authentication_classes和permission_classes。这些属性会告诉Django Rest Framework使用TokenAuthentication进行身份验证,并且只有验证过的用户才能够访问此视图。

三、示例

示例1:使用Basic认证

可以使用Django Rest Framework的Basic认证来对API进行认证。Basic认证是一种最常见的HTTP认证协议。基本认证会发送用户名和密码,并将这些信息进行Base64编码,然后将其放入HTTP头部,并发送给服务器。

可以通过如下方式启用Basic认证:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.BasicAuthentication',
    ],
}

在上面的代码中,我们使用BasicAuthentication作为默认的身份验证类。

接下来,我们可以通过BasicAuthentication的credentials属性来访问认证所提供的用户名和密码信息:

from rest_framework.authentication import BasicAuthentication
from rest_framework.permissions import IsAuthenticated
from django.contrib.auth import authenticate

class HiddenView(APIView):
    authentication_classes = [BasicAuthentication]
    permission_classes = [IsAuthenticated]

    def get(self, request):
        # 获取用户名和密码
        username = request.auth[0]
        password = request.auth[1]

        # 认证用户
        user = authenticate(username=username, password=password)

        content = {'message': '您已登录!'}
        return Response(content)

在上面的代码中,我们首先使用BasicAuthentication作为身份验证类,并将其添加到HiddenView视图中。之后,我们从request.auth中获取Basic认证所提供的用户名和密码。然后,我们使用Django的authenticate()方法来验证用户名和密码。最后,我们返回响应结果。

示例2:使用JWT认证

JSON Web Token(JWT)是一种开放标准(RFC 7519),用于在网络应用中传输声明。JWT通过使用签名或加密的方式来进行安全通信。JWT包含了一些有关于用户身份的信息。

可以通过如下方式启用JWT认证:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ],
}

在上面的代码中,我们使用JWTAuthentication作为身份验证类。

接下来,我们可以在视图中使用JWT认证:

from rest_framework_simplejwt.tokens import AccessToken
from rest_framework.permissions import IsAuthenticated

class HiddenView(APIView):
    permission_classes = [IsAuthenticated]
    authentication_classes = [JWTAuthentication]

    def get(self, request):
        access_token = AccessToken.for_user(request.user)
        content = {'message': f'您已登录!\nToken: {access_token}'}
        return Response(content)

在上面的代码中,我们使用了rest_framework_simplejwt库中的AccessToken类来为当前用户生成一个token,并将其存储在access_token变量中。之后,我们可以将access_token的值返回给用户。就这样使用JWT进行认证。

至此,我们已经完成了“django rest framework实现用户登录认证详解”攻略的讲解。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:django rest framework 实现用户登录认证详解 - Python技术站

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

相关文章

  • Django request 常用属性

    一、request属性 path  获取url全路径(出去域名外) 用法: request.path GET 用户所有的get内容以字典的形式存储 例:{‘name’:’alan’} 用法: data = request.GET.get(‘name’) POST 用户所有的post内容以字典的形式存储 例:{‘name’:’alan’} 用法: data =…

    Django 2023年4月13日
    00
  • Django实现数据表数据插入

    数据表数据插入是Django中非常重要的操作之一,下面是详解Django实现数据表数据插入完整攻略: 定义模型 首先,你需要定义你的数据表,这可以通过在应用程序中定义一个模型类来实现。例如,我们创建了一个名为“Book”的应用程序,可以在models.py中定义如下的模型: from django.db import models class Book(mo…

    Django 2023年3月12日
    00
  • CI/CD—-jenkins+gitlab+django(内网)

    1.py第三方包获取 ./pip3 install –target=/home/pyscript Django==1.8.11 ./pip3 install –target=/home/pyscript Django==1.8.11 -i “http://pypi.douban.com/simple/” –trusted-host pypi.douba…

    Django 2023年4月13日
    00
  • django开发中遇到的问题

    今天在做购物车的时候,在做添加购物车功能时,先要判断当前用户的购物车下有没有当前商品,如果有的话就把商品的数量新增传到后台的数量个。 在当前用户的购物车中存在该商品的情况下,在更新商品数量的时候由于粗心出了问题,在更新完商品数量之后忘记了提交保存,导致商品数量不能更新,找bug找了挺长时间,所以写下来 为了提示一下自己。 1 userID=request.s…

    Django 2023年4月13日
    00
  • 【Python web 开发】django rest framwork 的token 登录和原理

      背景: 有些接口比如提交订单,获取用户列表是要用到用户信息的,是要用户登录后才能进行的 用户登录在前后端分离系统中与我们之前基于模板template进行开发是有区别的 思考一个问题:为什么我们的django  rest framwork 会有登录和退出功能呢? 因为,这里有配置哦 这里有 login 和loginout,里面的 login 调用了logi…

    Django 2023年4月12日
    00
  • Django如何将自己的网站让其他主机访问

    ##第一点: 需要在你的setting.py文件中将按照如下设置: ALLOWED_HOSTS = [‘127.0.0.1’, ‘192.168.1.102’] 192.168.1.102是Django所在机器的IP  (此段验证未成功:或者在中括号中加入你在局域网中的IP。如我在局域网中的IP为192.168.10.133 所以设置ALLOWED_HOST…

    Django 2023年4月11日
    00
  • Django+Vue打造购物网站(四)

    首页商品类别数据显示 商品分类接口 大概需要两个,一个显示三个类别 一个显示类别及类别下的全部商品 现在开始写商品的接口首先编写三个分类的serializer class CategorySerializer3(serializers.ModelSerializer): ”’ 三级分类 ”’ class Meta: model = GoodsCatego…

    2023年4月9日
    00
  • django学习——通过HttpResponseRedirect 和 reverse实现重定向(转载)

    人分类: django   用django开发web应用, 经常会遇到从一个旧的url转向一个新的url,也就是重定向。 HttpResponseRedirect:构造函数的第一个参数是必要的 — 用来重定向的地址。这些能够是完全特定的URL地址(比如,’http://www.yahoo.com/search/‘),或者是一个不包含域名的绝对路径地址(例如,…

    Django 2023年4月12日
    00
合作推广
合作推广
分享本页
返回顶部