关键词

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

下面我就为您详细讲解“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实现用户登录认证详解”攻略的讲解。

本文链接:http://task.lmcjl.com/news/16118.html

展开阅读全文