📜  REST api Dajngo 中的基本身份验证 - 基本(1)

📅  最后修改于: 2023-12-03 14:47:04.636000             🧑  作者: Mango

REST API Django 中的基本身份验证 - 基本

在 Django REST Framework 中,身份验证是通过使用认证程序来实现的,其中包括基本身份验证。基本身份验证是通过将用户的凭据(用户名和密码)包含在 Authorization 请求头中来实现的。在使用基本身份验证时,应注意安全性,因为凭据通过明文传输。

如何实现基本身份验证?

首先,在你的 Django 项目中安装 djangorestframework,并将其添加到 INSTALLED_APPS。然后,在视图函数或视图类中添加 authentication_classes 列表作为类属性,并将其设置为 BasicAuthentication。代码如下:

from rest_framework.authentication import BasicAuthentication
from rest_framework.views import APIView

class MyView(APIView):
    authentication_classes = [BasicAuthentication]

    def get(self, request):
        ...

接下来,你需要创建一个自定义用户模型,并添加到你的 AUTH_USER_MODEL 设置。代码如下:

# settings.py
AUTH_USER_MODEL = 'myapp.MyUser'
# myapp/models.py
from django.contrib.auth.models import AbstractUser

class MyUser(AbstractUser):
    pass

然后,你需要为你的自定义用户模型创建一个自定义认证后端,以确保用户凭据正确。代码如下:

from django.contrib.auth.backends import BaseBackend
from django.contrib.auth import get_user_model

class MyBackend(BaseBackend):
    def authenticate(self, request, username=None, password=None):
        UserModel = get_user_model()

        try:
            user = UserModel.objects.get(username=username)

            if user.check_password(password):
                return user

        except UserModel.DoesNotExist:
            return None

    def get_user(self, user_id):
        UserModel = get_user_model()

        try:
            return UserModel.objects.get(pk=user_id)

        except UserModel.DoesNotExist:
            return None

最后,在 settings.py 中添加以下代码:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.BasicAuthentication',
        'myapp.backends.MyBackend',
    ],
}
总结

这就是在 Django REST Framework 中实现基本身份验证所需的全部步骤。通过遵循以上步骤,你的 HTTP 请求将包含用户名和密码,以便通过已定义的后端进行验证。即使基本身份验证有其局限性,但对于某些临时使用的 API,它仍然是一个快速而简单的选项。请记住,在生产环境中使用身份验证时,应该使用更强大的方案来保护你的应用程序。