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实现用户登录认证详解”攻略的讲解。

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

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

相关文章

  • vue+django配置

    1.写完Vue项目 修改src/router/index.js的Router对象 export default new Router({ mode: ‘history’, routes: [ { path: ‘/’, name: ‘Pos’, component: Pos } ] }) //添加mode:’history’ 2.修改config/index.…

    Django 2023年4月13日
    00
  • jQuery的ajax与django传参

    Django中的代码如下: urls.py代码: from django.conf.urls import url from django.contrib import admin import AjaxTest.views urlpatterns = [ url(r’^admin/’, admin.site.urls), url(r”^index/$”,A…

    Django 2023年4月13日
    00
  • Python Django实现个人博客系统的搭建

    Python Django实现个人博客系统的搭建攻略 简介 Python的Django框架在web开发中应用广泛,本文将介绍如何使用Django框架搭建个人博客系统。该博客系统除常见博客功能外,还包含用户身份验证,文章归档,评论系统等功能。 必要的工具及技能 在开始搭建博客系统前,需要准备好以下工具及技能: Python3.x Django HTML,CSS…

    Django 2023年5月16日
    00
  • Python——Django-__init__.py的内容

    一、告诉Django用pymysql来代替默认的MySQLdb(在__init__.py里) import pymysql #告诉Django用pymysql来代替默认的MySQLdb pymysql.install_as_MySQLdb()  

    Django 2023年4月10日
    00
  • Django中的ajax请求

    接下来我将为你详细讲解Django中的Ajax请求的完整攻略,包含两个示例说明。 一、什么是Ajax请求 Ajax是Asynchronous JavaScript and XML的缩写,即使用JavaScript在不重新加载整个页面的情况下异步地与服务器交换数据。Ajax技术使用了XMLHttpRequest对象与服务器进行异步通信,然后使用JavaScri…

    Django 2023年5月16日
    00
  • 启动Django项目

    Django是一个高效、灵活、模块化的Python web框架,用于快速开发Web应用程序。Django的核心包括模型、视图和模板,它们可以帮助开发人员快速构建功能强大的Web应用程序,并提供一种易于使用的API来连接不同的组件。 在这篇文章中,我们将学习如何启动Django项目。下面是详细的步骤: 首先,确保你安装了Python。 你需要安装Python才…

    Django 2023年3月12日
    00
  • Django用户身份验证完成示例代码

    关于Django用户身份验证完成示例代码,我们可以大概分为以下两个部分进行讲解: 认证机制设置 在开始编写代码前,我们需要先在Django工程下设置好认证机制。具体做法如下: (1)在settings.py文件中找到INSTALLED_APPS(已安装应用列表)这个配置项,在其中添加django.contrib.auth模块。 (2)在settings.py…

    Django 2023年5月16日
    00
  • django2 + python3 显示静态文件中的图片

    之前一直搞不出来 是因为图片的问题,步骤也就是固定的几步,到位了就差不多成了文件夹结构:. ├── HelloWorld │   ├── __init__.py │   ├── __pycache__ │   │   ├── __init__.cpython-36.pyc │   │   ├── settings.cpython-36.pyc │   │  …

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