Python + Django4 搭建个人博客(十四):实现用户登录和登出功能

article/2025/8/20 16:47:39

本篇开始我们来实现用户管理模块。

首先我们来实现一下用户的登录和登出。

创建APP

用户和文章属于不同的功能模块,为了方便管理,我们新建一个名为userprofileApp

运行startapp指令创建新的app:

python manage.py startapp userprofile

可以看到我们已经生成了一个新的App

将App添加到App列表:

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','article',# 新增'userprofile'代码,激活app'userprofile',
]

编写登录表单

用户登录时,需要填写账户密码等表单数据,因此又要用到Form表单类。

之前在创建文章的时候我们介绍了,Django表单,当时我们使用了forms.ModelForm的继承类,这次我们再使用另外一个类:forms.Form

userprofile目录中创建表单类的文件forms.py,编写如下代码:

# 引入表单类
from django import forms# 登录表单,继承了 forms.Form 类
class UserLoginForm(forms.Form):username = forms.CharField()password = forms.CharField()

forms.ModelForm,这个父类适合于需要直接与数据库交互的功能。

forms.Form需要手动配置每个字段,它适用于不与数据库进行直接交互的功能。用户登录不需要对数据库进行任何改动,因此直接继承forms.Form就可以了。

编写视图

常规的App我们在编写视图之前还需要编写模型,但是在Django框架下,我们在创建项目的时候Django已经自动帮我们创建了一个用户模型。

实际上我们在使用Admin模块的时候已经用到了。

我们在实现用户功能的时候可以直接使用Django内置的User模型,针对自带User模型Django内部也集成了一些常见的视图函数,比如登录,登出,会话管理等,可以极大的提示我们的Web开发效率。

登录视图

userprofile/views.py中写视图函数:

from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
from django.http import HttpResponse
from .forms import UserLoginForm# Create your views here.def user_login(request):if request.method == 'POST':user_login_form = UserLoginForm(data=request.POST)if user_login_form.is_valid():# .cleaned_data 清洗出合法数据data = user_login_form.cleaned_data# 检验账号、密码是否正确匹配数据库中的某个用户# 如果均匹配则返回这个 user 对象user = authenticate(username=data['username'], password=data['password'])if user:# 将用户数据保存在 session 中,即实现了登录动作login(request, user)return redirect("list")else:return HttpResponse("账号或密码输入有误。请重新输入~")else:return HttpResponse("账号或密码输入不合法")elif request.method == 'GET':user_login_form = UserLoginForm()context = { 'form': user_login_form }return render(request, 'userprofile/login.html', context)else:return HttpResponse("请使用GET或POST请求数据")

这里我们引入了Django自带的authenticate, login模块,用来实现用户验证和登录功能。

  • 跟发表文章的表单类类似,Form对象的主要任务就是验证数据。调用is_valid()方法验证并返回指定数据是否有效的布尔值。
  • Form不仅负责验证数据,还可以“清洗”它:将其标准化为一致的格式,这个特性使得它允许以各种方式输入特定字段的数据,并且始终产生一致的输出。一旦Form使用数据创建了一个实例并对其进行了验证,就可以通过cleaned_data属性访问清洗之后的数据。
  • authenticate()方法验证用户名称和密码是否匹配,如果是,则将这个用户数据返回。
  • login()方法实现用户登录,将用户数据保存在session中。

Session在网络应用中,称为“会话控制”,它存储特定用户会话所需的属性及配置信息。

当用户在 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。

Session 最常见的用法就是存储用户的登录数据。

登出视图

登出视图更加简单,引入logout模块直接调用自带的logout()函数,所有的Web相关动作Django后台都做完了。

# 用户退出
def user_logout(request):logout(request)return redirect("list")

编写模板

这里我们改两个地方:

1.增加导航栏入口:

改写一下tempalates/header.html,把登录和登出的按钮加进去:

	...<li class="nav-item"><a class="nav-link" href="{% url 'create' %}">创作</a></li>
#增加以下内容<!-- Django的 if 模板语句 -->{% if user.is_authenticated %}<li class="nav-item dropdown"><a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">{{ user.username }}</a><ul class="dropdown-menu"><a class="dropdown-item" href="{% url 'logout' %}">退出登录</a></ul></li><!-- 如果用户未登录,则显示 “登录” -->{% else %}<li class="nav-item"><a class="nav-link" href="{% url 'login' %}">登录</a></li><!-- if 语句在这里结束 -->{% endif %}

这里使用了新的模板语法:{% if ... %},用来判断用户是否已经登录:

  • 如果用户已经登录,则显示一个名字为用户名称的下拉框,下拉框有一个子选项登出,就像通常的社交网站一样。
  • 如果用户未登录,则显示“登录”两个字提醒用户可以点击登录。

is_authenticatedmodels.User类的属性,用于判断用户是否已通过身份验证。

2.新建登录页面

新建文件夹templates/userprofile,然后再文件夹内新增login.html

{% extends "base.html" %} {% load static %}
{% block title %} 登录 {% endblock title %}
{% block content %}
<div class="container"><div class="row"><div class="col-12"><br><form method="post" action=".">{% csrf_token %}<!-- 账号 --><div class="form-group"><label for="username">账号</label><input type="text" class="form-control" id="username" name="username"></div><!-- 密码 --><div class="form-group"><label for="password">密码</label><input type="password" class="form-control" id="password" name="password"></div><!-- 提交按钮 --><button type="submit" class="btn btn-primary">提交</button></form></div></div>
</div>
{% endblock content %}

改写URL

在url.py 文件中引入userprofile的视图,并添加用户管理的url路由地址。

from django.contrib import admin
from django.urls import path, re_path
# 引入app视图
import article.views
import userprofile.viewsurlpatterns = [path('admin/', admin.site.urls),path('hello/', article.views.hello),re_path(r'^$', article.views.article_list),path('list/', article.views.article_list, name='list'),  # 展示文章path('detail/<int:id>/', article.views.article_detail, name='detail'),  # 文章详情path('create/', article.views.article_create, name='create'),  # 写文章path('delete/<int:id>/', article.views.article_delete, name='delete'),# 删除文章path('update/<int:id>/', article.views.article_update, name='update'),    # 更新文章# 增加用户管理path('login/', userprofile.views.user_login, name='login' ),path('logout/', userprofile.views.user_logout, name='logout' ),
]

因为userprofile这个app并没有改动model,因此我们不用迁移数据。

运行服务器,打开博客网址,如果我们之前使用超级用户admin登录过,则会直接显示我们已登录超级用户信息:

在用户下拉菜单中点击退出登录,网址将会出现登录按钮:

点击登录按钮

输入用户名和密码后,点击登录按钮,登录成功,显示我们的用户名:

至此,我们已经完整的实现了用户的登录和登出功能。

结语

本篇,我们利用Django内置的User模型,并调用了内置的loginlogout等功能函数实现了一个Web网站的登录和登出功能。

在模板中使用的Django模板的{% if ... %}语法,实现了根据不同的条件显示不同内容。

下篇我们继续实现用户管理相关的功能:用户注册。


http://chatgpt.dhexx.cn/article/hAql6V8Q.shtml

相关文章

Springboot+JWT+Redis实现登陆登出功能

1&#xff1a;什么是Token&#xff1f;&#xff1a;三部分组成&#xff1a;头有效负载签名 1.1 JWT创建中的一些方法讲解&#xff1a; public static String createTokenWithClaim(User user){//构建头部信息Map<String,Object> map new HashMap<>();map.put(&qu…

单点登录与单点登出

一、标准流程描述 CAS官网的标准流程&#xff1a; SSO标准流程 流程描述&#xff1a; First Access&#xff1a; 第3步数据走向 第4步数据走向 第一次访问app.example.com&#xff08;service地址&#xff09;&#xff0c;请求参数中session为空&#xff0c;app service没做…

[django项目] 实现用户登录登出功能

用户登录登出功能 I. 功能需求分析 1>功能分析 1.1>流程图 1.2>功能接口 登录页面登录功能退出功能 II. 登陆页面 1>接口设计 1.1>接口说明 类目说明请求方法GETurl定义/users/login/参数格式无参数 1.2>返回结果 登陆页面 2.后端代码 user/views…

后台登录登出

后台登录登出 一&#xff0e;Session简介 在WEB开发中&#xff0c;服务器可以为每个用户浏览器创建一个会话对象&#xff08;session对象&#xff09;&#xff0c;注意&#xff1a;一个浏览器独占一个session对象(默认情况下)。因此&#xff0c;在需要保存用户数据时&#xff…

JWT 的登出问题

Jwt 使用起来不难&#xff0c;而且让我们将“无状态”的概念更贴切的展示出来了&#xff0c;但是实践就真的这么完美吗&#xff1f;不是&#xff0c;因为jwt 的登出问题。 何为登出&#xff1a;就是用户自己点击登出后&#xff0c;或用户的角色/权限改变后&#xff0c;该token…

Shiro入门之实现登录登出

概述 这里使用Shiro来实现用户的登录和登出功能。 前提&#xff1a;已经会Spring集成Shiro。即使没有下面也会提供源码&#xff0c;下面只说明Shiro部分的核心代码&#xff0c;如Mapper、Service类中的代码基本上就是从数据库中读取数据&#xff0c;而且源码有提供&#xff0…

cas5.3.2单点登录-单点登出(十一)

原文地址&#xff0c;转载请注明出处&#xff1a; https://blog.csdn.net/qq_34021712/article/details/81515317 ©王赛超 既然有单点登录,肯定就要有登出,之前的整合都是只针对了登录&#xff0c;对登出并没有关注,今天我们就来讲讲登出。 关于单点登出原理&#…

数说故事车企数字化渠道管理创新方法——精准进行消费者洞察

随着疫情带来的变化&#xff0c;原来在一二线城市的购物中心店&#xff0c;受人流量的不确定性冲击越来越大&#xff0c;但成本的支出也越来越高。因此购物中心店&#xff0c;将有可能从原来的重“集客”功能&#xff0c;变成更多的从品牌、体验出发的形象中心店&#xff0c;“…

权威报告!这五个消费趋势,告诉你如何抓住中国消费者的心和钱包

有人说2023年是消费复苏的一年&#xff0c;市场回暖趋势明显&#xff1b;也有人说之前的亏空太大&#xff0c;想要短时间追上来不太可能&#xff0c;因此2023的消费市场最多是不低迷&#xff0c;达不到火热。 这可把做生意的各位老板整纠结了&#xff0c;究竟今年要不要投个大手…

ChatGPT与数据挖掘:洞察消费者行为,优化营销策略

随着科技的不断进步和数字化时代的到来&#xff0c;企业们越来越意识到数据的重要性。在零售和电子商务行业&#xff0c;了解消费者行为并准确洞察其需求&#xff0c;是成功营销和提升业绩的关键。而现在&#xff0c;借助人工智能技术中的ChatGPT以及数据挖掘技术&#xff0c;企…

市场营销学5——消费者购买行为分析

什么是消费者购买行为 消费者购买行为是指人们为满足需要和欲望而寻找、选择、购买、使用、评价及处置产品、服务时介入的过程活动&#xff0c;包括消费者的主观心理活动和客观物质活动两个方面。 消费者购买行为分析的环节 消费者购买行为研究包括以下几个环节&#xff1a; 购…

【消费战略方法论】认识消费者的恒常原理(三):消费者刺激反馈原理

人类是一种高度智能的生物&#xff0c;而所谓智能的核心在于其理解世界的能力&#xff0c;而理解世界的过程中必然伴随着感知和反应。人的刺激反馈机制就是在这个过程中发挥着重要的作用。 刺激反馈机制是一种生物学的反应现象&#xff0c;它指的是人体对外界刺激的感知与反应…

大数据之kafka消费者

&#x1f352;今天是端午节&#xff0c;先祝大家端午节快乐&#xff01;上一期我们学习了kafka的broker部分主要介绍了kafka中的副本、kafka文件的存储的原理&#xff0c;以及kafka的高效读写的保证&#xff0c;今天我们来介绍kafka中的消费者原理&#xff0c;对往期内容感兴趣…

元年智答|数据洞察功能介绍

什么是数据洞察 随着企业积累数据量增多&#xff0c;数据分析师常常需要处理“长且宽”的数据集。依靠人的经验处理海量数据&#xff0c;从海量数据中发掘出有用的信息无异于大海捞针。虽然人工智能技术的普及和单位算力价格的下降大大降低了数据挖掘的门槛&#xff0c;但是面…

营销创意没灵感?社交媒体和消费者洞察给你答案

创意是营销的核心。 品牌需要优秀的创意营销才能吸引消费者、与受众建立联系、宣传产品与服务。 想要营销内容创作方面表现出色&#xff0c;品牌就需要源源不断的新鲜创意来抓住人们的眼球、占领消费者注意力。 在实际营销过程中&#xff0c;出海品牌常常为创意冥思苦想、绞尽…

经典消费者生产者问题

首先你需要了解多线程的流程以及实现多线程的几种方法&#xff0c;同时你要理解什么是并行、并发&#xff0c;以及线程和进程的区别&#xff0c;这里做简要的区别。 线程&#xff1a;一个进程包括多个线程 并行&#xff1a;多个cpu实例或者多台机器同时执行一段处理逻辑&#x…

【报告分享】德勤:2023中国消费者洞察与市场展望.pdf(附下载链接)

省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 【免费下载】2022年12月份热门报告盘点 罗振宇2023年跨年演讲PPT原稿吴晓波2022年年终秀演讲PPT原稿2023年&#xff0c;如何科学制定年度规划&#xff1f; 《底层逻辑》高清配图 华为202…

2023中国消费者洞察报告

下载报告去公众号&#xff1a;硬核刘大 后台回复“ 消费者洞察”&#xff0c;即可下载完整PDF文件。 更多报告内容&#xff0c;可加微信&#xff1a;chanpin628 领取。(ps&#xff1a;加过微信&#xff1a;chanpin628 的不要再加&#xff0c;分享的内容一样&#xff0c;有一个…

大数据营销更需要消费者洞察

2013年10月17日&#xff0c;独立商业趋势观察家&#xff0c;知名中国消费趋势研究专家&#xff0c;数字营销专家肖明超先生&#xff0c;应凤凰网的邀请参加了凤凰网在广州举办的“营销人的幸福梦”主题沙龙活动&#xff0c;并与凤凰网副总裁徐进、琥珀传播CEO刘阳&#xff0c;一…

消费者消费消息分析

消费者读流程 】每个consumer都可以根据分配策略&#xff08;默认RangeAssignor&#xff09;&#xff0c;获得要消费的分区 】 获取到consumer对应的offset&#xff08;默认从ZK中获取上一次消费的offset&#xff09; 】 找到该分区的leader&#xff0c;拉取数据 】 消费者提交…