下面我就为您详细讲解“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技术站