Django中的HTTP Basic身份验证
HTTP Basic认证是一种简单的身份验证机制,它要求用户提供用户名和密码作为标准的HTTP头部信息("Authorization")的一部分,从而验证用户身份。Django内置了HTTP Basic身份验证的功能,可以通过以下步骤实现:
- 在settings.py中添加以下代码:
MIDDLEWARE = [ # ... 'django.contrib.auth.middleware.AuthenticationMiddleware', # 添加认证中间件 # ... ] AUTHENTICATION_BACKENDS = [ 'django.contrib.auth.backends.AllowAllUsersModelBackend', # 允许所有用户进行认证 ]
- 在views.py中编写视图函数,实现HTTP Basic身份验证:
from django.contrib.auth import authenticate from django.http import HttpResponse from django.views.decorators.http import require_http_methods @require_http_methods(["GET"]) # 支持GET请求 def my_view(request): # 获取认证头部信息 auth_header = request.META.get('HTTP_AUTHORIZATION').split() # 验证头部信息是否正确 if len(auth_header) == 2 and auth_header[0].lower() == 'basic': # 解码用户名和密码 auth_bytes = base64.b64decode(auth_header[1]).decode('utf-8').partition(':') # 使用authenticate方法验证用户身份 user = authenticate(username=auth_bytes[0], password=auth_bytes[2]) if user is not None and user.is_active: # 认证成功后返回相应结果 return HttpResponse("认证成功!") # 认证失败返回401响应(需要身份认证) response = HttpResponse(status=401) response['WWW-Authenticate'] = 'Basic realm="example"' return response
- 使用浏览器或者curl等工具发送GET请求,带上合适的用户名和密码,即可进行HTTP Basic身份验证。如下所示:
curl -u pidancode.com:皮蛋编程 http://localhost:8000/my_view/
以上代码中,curl命令通过"-u"参数指定了用户名和密码,发送GET请求到http://localhost:8000/my_view/视图函数中,如果用户名和密码正确,则返回“认证成功!”的响应;如果认证失败,则返回401状态码和需要身份认证的响应头部信息。
相关文章