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

yizhihongxing

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(2) – Django模板

    1.Django模板介绍 基础概念 模板是具有一定的格式或骨架,可以动态的生成HTML 模板引擎决定以何种方式组织代码 一个项目可以有一个或者是多个模板引擎,Django里面主要两个模板引擎:DTL、Jinja2。 Jinja2之前Flask笔记里面有,点击跳转https://www.cnblogs.com/gltou/p/16828437.html   D…

    Django 2023年4月13日
    00
  • Python – Django – ORM 操作数据

    app01/models.py 中定义的类,也就是创建的表 from django.db import models # 类必须继承 models.Model class Admin(models.Model): # 创建一个主键自增的字段 id = models.AutoField(primary_key=True) # AutoField 为自增的字段 …

    Django 2023年4月10日
    00
  • Django + Axios & Ajax post和get 传参

    话说千遍淡如水,不如代码来一通。   Axios post: let params = new URLSearchParams(); params.append(‘id’,xx) axios({ url:’http://127.0.0.1:8000/userctrl/shoucang’, method:’post’, data:params, respons…

    Django 2023年4月13日
    00
  • 简单介绍Python的Django框架的dj-scaffold项目

    Python的Django框架是一个非常流行的Web开发框架,可以让开发人员快速构建高质量的Web应用程序。Django框架的dj-scaffold项目是一个用于快速创建Django应用程序的命令行工具,它可以在几分钟内创建完整的Django应用程序骨架。下面详细介绍dj-scaffold的使用过程。 安装dj-scaffold 首先需要安装dj-scaff…

    Django 2023年5月16日
    00
  • django前端到后端一次简单完整的请求实例

      请求过程: 用户请求—〉django的路由系统—〉根据url不同分发到不同的views函数做对应处理—-〉返回html格式的字符串(需要动态请求的到数据库里面拿到数据迁入到html文件中)   一、django项目初始化 二、配置数据库,生成数据     三、配置url.py文件   四、配置views视图函数:   五、编程html文件: …

    Django 2023年4月12日
    00
  • Django关于admin的使用技巧和知识点

    在这里我将为您提供使用Django admin的一些技巧和知识点。 1.创建管理员账户 在使用Django的admin之前,我们需要先创建一个管理员账户,可以通过执行以下命令来创建管理员账户: python manage.py createsuperuser 接着,按照提示输入账户名、邮箱和密码即可。 2.自定义Django admin 在Django中,可…

    Django 2023年5月16日
    00
  • Django动态渲染多层菜单

      为后续给菜单设置权限管理方便,通过给页面模版菜单动态渲染,通过数据菜单表进行匹配需要渲染的菜单 1 #Django表结构 2 3 class Menus(models.Model): 4 5 name = models.CharField(max_length=32, verbose_name=u’菜单名’) 6 parent = models.Fore…

    Django 2023年4月13日
    00
  • 简单聊一下Uwsgi和Django的爱恨情仇

    项目目录:/root/app Uwsgi的配置文件 [uwsgi] # Python扩展包安装的地方 pythonpath=/usr/local/src/python3/lib/python3.5/site-packages # Django根目录 chdir=/root/app # wsgi.py跟根目录的相对路径 wsgi-file=app/wsgi.p…

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