Django框架使用内置方法实现登录功能详解

Django框架使用内置方法实现登录功能详解

在web应用程序中,登录功能是非常常见的模块。在Django框架中,我们可以使用内置方法来实现登录功能。该方法相对简单,且Django提供了相应的便捷的工具类。

创建登录页面

首先,我们需要创建一个登录页面。在Django中,我们使用模板来创建我们的用户界面。在templates文件夹下创建login.html模板文件,如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Login</title>
</head>
<body>
  {% if error_message %}
    <p><strong>{{ error_message }}</strong></p>
  {% endif %}

  <form action="{% url 'login' %}" method="post">
    {% csrf_token %}
    <label for="username">Username:</label>
    <input type="text" name="username" id="username"><br>

    <label for="password">Password:</label>
    <input type="password" name="password" id="password"><br>

    <input type="submit" value="Log in">
  </form>
</body>
</html>

在该模板文件中,我们使用了Django内置的模板语法。其中,{{ error_message }}是我们用于在登录出现错误时显示错误信息的变量。

接下来,我们需要定义一个视图函数,用于处理login.html页面的请求。在views.py中添加如下代码:

from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login

def login_view(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            return redirect('home')
        else:
            error_message = 'Invalid username or password.'
    else:
        error_message = None
    return render(request, 'login.html', {'error_message': error_message})

在该视图函数中,我们首先检查用户是否已经提交了表单数据(即使用POST方法)。如果是,那么我们获取用户在表单中输入的账号和密码,并使用Django内置的authenticate函数来验证这些信息。

如果用户验证成功,则我们调用Django内置的login函数来将用户的信息保存到当前用户的会话中,并将用户重定向至主页。相反,如果验证失败,则我们将错误信息存储在error_message中,并将其作为上下文变量传递给模板,以便在登录页面中显示。

创建主页

现在,我们需要创建一个主页来显示已经登录的用户信息。在templates文件夹下创建home.html模板文件,如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Home</title>
</head>
<body>
  {% if user.is_authenticated %}
    <h1>Welcome, {{ user.username }}!</h1>
    <p><a href="{% url 'logout' %}">Log out</a></p>
  {% else %}
    <h1>Welcome to my site!</h1>
    <p><a href="{% url 'login' %}">Log in</a></p>
  {% endif %}
</body>
</html>

在该模板文件中,我们检查user对象是否已经验证。如果用户已经验证,则我们显示欢迎信息,并提供重定向到注销页面的链接。相反,如果用户没有验证,则我们显示一则欢迎信息并提供重定向到登录页面的链接。

接下来,我们需要定义主页的视图函数。在views.py中添加如下代码:

from django.contrib.auth.decorators import login_required

@login_required
def home_view(request):
    return render(request, 'home.html')

在该视图函数中,我们使用Django内置的@login_required装饰器来验证用户是否已经登录。如果用户未登录,则他们将被重定向至登录页面。如果已经登录,则我们仅显示主页。

配置URLS

最后,我们需要配置我们的URLS来处理来自浏览器的请求。在urls.py中添加如下代码:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', views.login_view, name='login'),
    path('logout/', views.logout_view, name='logout'),
    path('', views.home_view, name='home'),
    path('accounts/', include('django.contrib.auth.urls')),
]

在该URL配置中,我们使用了三个视图函数:login_view,logout_view和home_view。我们也使用了一个名称login、logout和home来标识这些URL,以便在我们的模板中引用。我们还使用了Django的内置auth应用程序的URLS/include功能来包括auth应用程序的URLS,这样我们就可以访问auth应用程序中的所有视图函数了。

至此,我们已经成功地创建了登录功能,使用内置方法实现登录Django框架,并实现了关联的主页。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django框架使用内置方法实现登录功能详解 - Python技术站

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

相关文章

  • Django学习——全局templates引用的问题

    一、问题在构建网站的时候我们会用到全局的templates处理错误的网页,此时我们需要对urls进行一个映射,使得在使用的时候避免重复调用。在使用的时候还会产生错误代码:第一个是404界面的,第二个是500界面的(Django:2.2.2) ?: (urls.E007) The custom handler404 view ‘index.views.page…

    Django 2023年4月12日
    00
  • 通用的Django注册功能模块实现方法

    下面我将为你介绍如何实现通用的Django注册功能模块。总的来说,这个功能模块包含以下几个步骤: 创建一个注册页面,允许用户输入用户名、邮箱和密码。 将用户输入的信息添加到数据库中。 发送激活邮件给用户,要求用户点击链接进行账户激活。 下面是实现步骤的具体细节。 1. 创建注册页面 在Django中,可以使用内置的表单(Form)功能来创建注册页面。首先,创…

    Django 2023年5月16日
    00
  • Django 创建超级用户

    Django自带的后台管理是Django明显特色之一,可以让我们快速便捷管理数据。后台管理可以在各个app的admin.py文件中进行控制     #创建超级用户 python manage.py createsuperuser   注意密码需要8位,数字和字母组合   存储在auth_user表中   一、       基本设置   1、应用注册 若要把a…

    Django 2023年4月12日
    00
  • 在Django中使用ElasticSearch

    在Django中使用ElasticSearch需要以下步骤: 安装Elasticsearch和Python Elasticsearch客户端Elasticsearch可以在其官方网站上进行下载,并且有相应的安装教程。Python Elasticsearch客户端可以使用pip安装,命令为:pip install elasticsearch 在Django项目…

    Django 2023年5月16日
    00
  • Django框架之drf:7、认证组件,权限组件,频率组件,过滤的多种用法,排序,分页,

    Django框架之drf 一、认证组件 简介: ​ 登录认证的限制 ​ 认证组件是drf框架给我们提供的认证接口,它能够在请求进入视图函数/类前进验证(例如:认证用户是否登录),对不符合认证的请求进行拦截并返回校验失败的信息 1、认证组件使用步骤 模块地址: from rest_framework.authentication import BaseAuth…

    2023年4月10日
    00
  • 第八篇Django分页

    1.复杂版 data = [] for i in range(1, 302): tmp = {“id”: i, “name”: “alex-{}”.format(i)} data.append(tmp) print(data) def user_list(request): # user_list = data[0:10] # user_list = dat…

    Django 2023年4月16日
    00
  • Django Rest framework 框架

    一、开发模式:     1. 普通开发方式(前后端放在一起写)   2. 前后端分离(前后台通过ajaxo交互)     后端(django rest framework写的) <—-ajaxo—>  前端(vue写的) <—– >  用户     好处:   二、后端开发     为前端提供url(API的开发或者接口…

    Django 2023年4月13日
    00
  • django下创建多个app,如何设置每个app的urls

    1.创建第二个app   假设我们项目P下面已经有了一个默认的app,名字是app1。现在我想创建第二个app,名字时app2。   进入pychram下的Terminal中,运行命令: python manage.py startapp app2   此外,我在每个app下都建立一个urls.py,方便区分。   右击app名,new一个Python Fi…

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