用户登录登出功能实现

article/2025/8/20 15:41:27

用户登录登出功能实现

一、功能需求分析

1. 登录退出功能分析

  1. 流程图
    在这里插入图片描述
  2. 功能
    1. 登录页面
    2. 登录功能
    3. 退出功能

二、登录页面

1. 接口设计

  1. 接口说明
类目说明
请求方法GET
url定义/user/login/
参数格式无参数
  1. 返回结果

    登录页面

2.后端代码

  1. user/views.py代码:
from django.shortcuts import render
from django.views import View
# ....class LoginView(View):"""登录视图"""def get(self, request):return render(request, 'user/login.html')
  1. user/urls.py代码:
from django.urls import path, include
from . import views
app_name = 'user'urlpatterns = [path('register/', views.RegisterView.as_view(), name='register'),path('login/', views.LoginView.as_view(), name='login'),
]

3.前端页面代码

1.user/login.html

因为表单需要post请求,所以记得在页面使用{% csrf_token %}标签。

注册功能已经开发好了,所以页面的上的立即注册处的a标签href可以写好

{% extends 'base/base.html' %}
{% load static %}{% block title %}登录{% endblock title %}
{% block link %}<link rel="stylesheet" href="{% static 'css/user/auth.css' %}">
{% endblock link %}{% block main_start %}<!-- container start -->
<main id="container"><div class="login-contain"><div class="top-contain"><h4 class="please-login">请登录</h4><a href="{% url 'user:register' %}" class="register">立即注册 &gt;</a></div><form action="" method="post" class="form-contain">{% csrf_token %}<div class="form-item"><input type="text" placeholder="请输入用户名或手机号" name="account" class="form-control" autocomplete="off"></div><div class="form-item"><input type="password" placeholder="请输入密码" name="password" class="form-control"></div><div class="form-item clearfix"><label><input type="checkbox" name="remember"><span>记住我</span></label><a href="javascript:void(0);" class="forget-password">忘记密码?</a></div><div class="form-login"><input type="submit" value="登录" class="login-btn"></div>{% csrf_token %}</form></div>
</main>
<!-- container end -->
{% endblock main_start %}

在这里插入图片描述

三、登录功能

1. 业务流程

  1. 判断用户名账号是否为空
  2. 判断密码是否为空,格式是否正确
  3. 判断账户与密码是否正确

2.接口设计

接口说明:

类目说明
请求方法POST
url定义/user/login/
参数格式表单参数

参数说明:

参数名类型是否必须描述
account字符串用户输入的用户名
password字符串用户输入的密码
remember字符串用户是否选择免登录

返回结果:

{"errno": "0", "errmsg": "OK", 
}

3.后端代码

  1. 视图 在user目录下的views.py文件中定义如下视图:
class LoginView(View):"""登录视图"""def get(self, request):return render(request, 'user/login.html')def post(self, request):form = LoginForm(data=request.POST, request=request)if form.is_valid():return json_response(errmsg='恭喜登录成功!')else:err_msg_list = []for item in form.errors.values():err_msg_list.append(item[0])err_msg_str = '/'.join(err_msg_list)return json_response(errno=Code.PARAMERR, errmsg=err_msg_str)
  1. 表单 在user目下的forms.py文件中定义如下表单:
class LoginForm(forms.Form):account = forms.CharField(error_messages={'required': '账户不能为空'})password = forms.CharField(max_length=20, min_length=6,error_messages={'max_length': '密码长度要小于20','min_length': '密码长度要大于6','require': '密码不能为空'})remember = forms.BooleanField(required=False)def __init__(self, *args, **kwargs):self.request = kwargs.pop('request', None)super().__init__(*args, **kwargs)def clean_account(self):"""校验用户账户:return:account"""account = self.cleaned_data.get('account')if not re.match(r'^1[3-9]\d{9}$', account) and (len(account)<5 or len(account)>20):raise forms.ValidationError('用户账户格式不正确,请重新输入')# 一定要returnreturn accountdef clean(self):"""校验用户名密码,并实现登录逻辑:return:"""cleaned_data = super().clean()account = cleaned_data.get('account')password = cleaned_data.get('password')remember = cleaned_data.get('remember')# 登录逻辑#Q 相当于 or,判断输入账户是是手机号或用户名user_queryset = User.objects.filter(Q(mobile=account)|Q(username=account))if user_queryset:user = user_queryset.first()#user.check_password()是框架自带的用来校验密码是否一致的方法if user.check_password(password):if remember:self.request.session.set_expiry(constants.USER_SESSION_EXPIRY)else:self.request.session.set_expiry(0)login(self.request, user)else:raise forms.ValidationError('用户名密码错误!')else:raise forms.ValidationError('用户账号不存在,请重新输入!')
  1. 在user文件加下创建constants.py文件定义如下常量
# 用户session信息过期时间 单位秒 默认14天
USER_SESSION_EXPIRY = 14*24*60*60

4.前端js代码

修改user/login.html中用户账户输入框input的name为account

在static/js/user/下创建login.js文件
在这里插入图片描述
js代码如下:

$(function () {let $loginBtn = $('.login-btn');    // 获取登录按钮元素$loginBtn.click(function (e) {e.preventDefault(); // 阻止默认提交// 1.校验账户let sAccount = $('input[name="account"]').val();if (sAccount === ''){message.showError('用户账户不能为空');return}if(!(/^\w{5,20}$/).test(sAccount) && !(/^1[3-9]\d{9}$/).test(sAccount)){message.showError('用户账户格式不正确,请求重新输入');return}// 2.校验用户输入密码let sPassword = $('input[name="password"]').val();if(sPassword === ''){message.showError('用户密码不能为空');return}// 3.获取用户是否勾选'记住我',勾选为true,否则为falselet bRemember = $('input[name="remember"]').is(':checked');// 4.发送ajax$.ajax({url: '/user/login/',data: {account: sAccount,password: sPassword,remember: bRemember},type: 'POST',dataType: 'json',success: function (res) {if(res.errno === '0'){message.showSuccess('恭喜, 登录成功!');setTimeout(function () {//注册成功之后重定向到打开登录页面之前的页面if(!document.referrer || document.referrer.includes('/user/login/') || document.referrer.includes('/user/register/')){window.location.href = '/'}else {window.location.href = document.referrer}}, 3000)}else{message.showError(res.errmsg)}},error: function (xhr, msg) {message.showError('服务器超时,请重试')}});});
});

四、登出功能

1.接口设计

接口说明:

类目说明
请求方法GET
url定义/user/logou/
参数格式无参数

2.后端代码

# 在user目录下的views.py文件中定义如下视图:
class LogoutView(View):"""登出视图"""def get(self, request):logout(request)return redirect(reverse('user:login'))
# 在urser目录下的urls.py文件定义如下路由:
from django.urls import path
from . import views
app_name = 'user'urlpatterns = [path('register/', views.RegisterView.as_view(), name='register'),path('login/', views.LoginView.as_view(), name='login'),path('logout/', views.LogoutView.as_view(), name='logout'),
]

3.前端代码

# 修改templates/base/base.html中的header部分的代码如下
<header id="header"><div class="mw1200 header-contain clearfix"><!-- logo start --><h1 class="logo"><a href="javascript:void(0);" class="logo-title">Python</a></h1><!-- logo end --><!-- nav start --><nav class="nav"><ul class="menu"><li class="active"><a href="base.html">首页</a></li><li><a href="../course/course.html">在线课堂</a></li><li><a href="../doc/docDownload.html">下载文档</a></li><li><a href="search.html">搜索</a></li></ul></nav><!-- nav end --><!-- login start --><div class="login-box">{% if user.is_authenticated %}<div class="author"><i class="PyWhich py-user"></i><span>{{ user.username }}</span><ul class="author-menu">{% if user.is_staff %}<li><a href="javascript:void(0);">后台管理</a></li>{% endif %}<li><a href="{% url 'user:logout' %}">退出登录</a></li></ul></div>{% else %}<div><i class="PyWhich py-user"></i><span><a href="{% url 'user:login' %}" class="login">登录</a> / <a href="{% url 'user:register' %}"class="reg">注册</a></span></div>{% endif %}</div><!-- login end --></div>
</header>

在这里插入图片描述


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

相关文章

xubuntu系统偶发自动登出

项目场景&#xff1a; 系统&#xff1a;xubuntu-16.04.3-desktop 问题描述 使用xubuntu系统期间&#xff0c;在root用户下进行相关开发&#xff0c;突然系统会回到普通用户登录界面&#xff0c;需要输入密码进入到普通用户下   它会终止所有打开的应用程序和进程&#xff0…

Spring Security OAuth2 单点登录和登出

文章目录 1. 单点登录1.1 使用内存保存客户端和用户信息1.1.1 认证中心 auth-server1.1.2 子系统 service-11.1.3 测试 1.2 使用数据库保存客户端和用户信息1.3 单点登录流程1.2.1 请求授权码&#xff0c;判断未登录&#xff0c;重定向登录页1.2.2 登录成功&#xff0c;重定向继…

OneNote的正确登出方式

1. 账号已经是登录状态 点击oneNote右上角账户信息 》 注销按钮 &#xff08;退出登录&#xff0c;注意要确保笔记已经同步到云端&#xff09; 》会弹出以下提示窗口 》点击是 2. 关闭笔记本 点击左上角 》 文件 》信息》选中自己的笔记本 》设置 》关闭&#xff08;可防止…

springboot2.7+springsecurity实现简单的登录登出

由于网上搜索的资料大部分都是使用的springsecurity的低于5.7的版本&#xff0c;springsecurity的配置类是通过继承WebSecurityConfigurerAdapter这个类来重写configure&#xff0c;以此来实现认证和授权。近期学习springsecurity使用的是5.7的版本&#xff0c;所以简单整理一下…

Vue实现登录以及登出

首先先了解一下&#xff0c;我们的效果实现流程 首先登录概述及业务流程和相关技术点 1.登录页面的布局 2.创建两个Vue.js文件 3.一个我们来做登录页和注册页 4.登录页面的布局 5.配置路由 6…

iOS快捷指令:一键登录/登出南京大学校园网

软件版本要求&#xff1a;iOS13及以上 演示机型&#xff1a;iPhone 12 mini 演示系统版本&#xff1a;iOS14.6 文章目录 导言核心步骤&#xff1a;最简单的一键登录指令自动化&#xff1a;连接NJU-WLAN后自动登录修改细节&#xff1a;让指令变得更优雅小练习&#xff1a;创建…

瑞吉外卖 —— 2、后台登录和登出

目录 1、后台登录功能 1.1、接口分析 1.1.2、登录校验逻辑 1.2、代码 1.2.1、统一的返回结果实体类 1.2.2、controller 方法 1.3、测试 2、后台退出功能 2.1、分析 2.2、代码 3、未登录访问首页跳转到登录页面 3.1、分析 3.2、代码 1、后台登录功能 1.1、接口分析…

oc账号无法登出,oc登出后官网还显示登陆状态?

《C4D的十万个为什么》首发于 公众号&#xff1a;苦七君 免费搜索查看更多问题&#xff1a;kuqijun.com 问题&#xff1a; 在本电脑上&#xff0c;在C4D里面登出oc账号后&#xff0c;官网上还是显示登陆的。。导致账号被限制在此电脑上了&#xff0c;无法用其他电脑登陆。 正…

vue-admin-实现登出功能

实现登出功能 目标&#xff1a;实现用户的登出操作 登出仅仅是跳到登录页吗&#xff1f; 不&#xff0c;当然不是&#xff0c;我们要处理如下 同样的&#xff0c;登出功能&#xff0c;我们在vuex中的用户模块中实现对应的action 登出action src/store/modules/user.js // 登出…

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

本篇开始我们来实现用户管理模块。 首先我们来实现一下用户的登录和登出。 创建APP 用户和文章属于不同的功能模块&#xff0c;为了方便管理&#xff0c;我们新建一个名为userprofile的App 运行startapp指令创建新的app&#xff1a; python manage.py startapp userprofile…

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;企…