Login
网站首页 > 文章中心 > 其它

深入理解Django中内置的用户认证

作者:小编 更新时间:2023-08-08 14:10:31 浏览量:11人看过

Django是一款非常流行的开源Web框架,可以用于构建高效且安全的Web应用程序.Django内置了用户认证系统,可以方便地实现用户登录、注册等功能.本文将深入探讨Django中内置的用户认证系统,并提供两个示例说明.

深入理解Django中内置的用户认证-图1

用户认证系统概述

Django中的用户认证系统是通过Django自带的auth模块实现的,该模块提供了用户认证、用户管理等功能.用户认证系统的核心是User模型和AuthenticationMiddleware中间件.

User模型是Django中内置的用户模型,它保存了用户的基本信息(如用户名、密码、电子邮件等).AuthenticationMiddleware中间件则用于验证用户是否已经登录,并在需要时将用户信息添加到请求对象中.

Django中的用户认证系统支持多种方式的登录认证,包括基于表单的认证、基于HTTP的认证、基于OAuth的认证等.我们将分别介绍这些认证方式.

基于表单的用户认证

基于表单的用户认证是Django中最常用的认证方式,也是最容易实现的.要启用基于表单的用户认证,可以在urls.py文件中添加以下代码:

from django.contrib.auth import views as auth_views

urlpatterns = [
# ...
]


深入理解Django中内置的用户认证-图2

这段代码将会将/login/和/logout/路径映射到auth_views.LoginView和auth_views.LogoutView视图上.我们可以通过编写templates/registration/login.html模板文件来自定义登录页面的样式.

{% extends 'base.html' %}

{% block content %}
  

Login

{% endblock %}

此外,我们还需要在settings.py文件中配置登录和登出重定向的路径:

LOGIN_REDIRECT_URL = '/'
LOGOUT_REDIRECT_URL = '/login/'

现在,我们已经可以在应用程序中使用基于表单的用户认证了.用户可以在登录页面中输入用户名和密码进行登录,一旦登录成功,Django会将用户的信息添加到请求对象中,并重定向到LOGIN_REDIRECT_URL所定义的路径.

基于HTTP的用户认证

基于HTTP的用户认证是Django中的另一种常用的认证方式.该方式利用HTTP的基本认证和摘要认证机制对用户进行认证.要启用基于HTTP的用户认证,可以在urls.py文件中添加以下代码:

from django.contrib.auth.decorators import login_required
from django.contrib.auth.views import LoginView, logout_then_login
from django.urls import path

urlpatterns = [
path('logout/', logout_then_login, name='logout'),
]

这段代码使用login_required装饰器保护/protected/路径,并将登录和登出视图分别映射到/login/和/logout/路径上.我们可以自定义模板文件来定制登录页面的样式.

{% extends 'base.html' %}

{% block content %}
  

Login

{% endblock %}

此外,我们还需要在settings.py文件中配置登录和登出后的重定向路径:

LOGIN_REDIRECT_URL = '/protected/'
LOGOUT_REDIRECT_URL = '/login/'

现在,我们已经可以在应用程序中使用基于HTTP的用户认证了.用户必须输入正确的用户名和密码才能访问/protected/路径.

示例说明

我们将使用一个基于表单的用户认证示例和一个基于HTTP的用户认证示例来说明Django中的用户认证系统.

示例1:基于表单的用户认证

考虑一个简单的博客应用程序,我们需要为博客添加用户认证功能.为此,我们需要完成以下步骤:

在urls.py文件中定义/login/和/logout/路径:

from django.contrib.auth import views as auth_views

urlpatterns = [
# ...
]

在settings.py文件中配置LOGIN_REDIRECT_URL和LOGOUT_REDIRECT_URL路径:

LOGIN_REDIRECT_URL = '/'
LOGOUT_REDIRECT_URL = '/login/'

自定义登录页面的样式.我们可以创建templates/registration/login.html模板文件,并添加如下内容:

{% extends 'base.html' %}

{% block content %}
  

Login

{% endblock %}

现在,用户就能够在博客应用程序的登录页面中输入用户名和密码,以此登录并访问受保护的页面.

示例2:基于HTTP的用户认证

假设我们正在开发一个基于RESTful API的应用程序,并使用Django REST framework.我们需要为API添加基于HTTP的用户认证功能,以确保API只能被授权的用户访问.为此,我们需要完成以下步骤:

在urls.py文件中定义/api/路径:

from django.urls import path, include
from rest_framework import routers, serializers, viewsets

from django.contrib.auth.decorators import login_required

from django.conf.urls import (handler400, handler403,handler404, handler500)

from .views import join,activate,logout_view, index, current_user

router = routers.DefaultRouter()


urlpatterns = [
path('api/logout/', logout_view),
]

handler400 = 'rest_framework.exceptions.bad_request'
handler403 = 'rest_framework.exceptions.forbidden'
handler404 = 'rest_framework.exceptions.not_found'
handler500 = 'rest_framework.exceptions.server_error'

使用login_required装饰器保护需要授权的URL.我们可以在视图函数中使用该装饰器,也可以在urls.py中使用该装饰器:

from django.contrib.auth.decorators import login_required
from django.http import HttpResponse

@login_required
def protected_view(request):
return HttpResponse('Hello, World!')

或者:

from django.contrib.auth.decorators import login_required
from django.urls import path
from .views import protected_view

urlpatterns = [
# ...
]

这样,只有登录用户才能访问使用login_required装饰器保护的URL.

以上就是土嘎嘎小编为大家整理的深入理解Django中内置的用户认证相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章