热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

html中退出登录怎么写,DjangoHTML表单实现用户登录退出(含源码)

在上一节中,我们实现了用户注册功能,在本节将继续介绍,如何使用Django实现用户的登录以及退出功能,希望大家通过这两节内容的学习,学会总结思路,把这个开发功能的过程反复练习,这样

在上一节中,我们实现了用户注册功能,在本节将继续介绍,如何使用 Django 实现用户的登录以及退出功能,希望大家通过这两节内容的学习,学会总结思路,把这个开发功能的过程反复练习,这样才能够更好的理解 Django 框架,而且在以后 Web 开发的道路上也会对自己大有裨益。

1. HTML表单实现用户的登录

通过前一节的学习,通过 HTML 表单并不难实现用户的登录功能,那么大家先思考一下,用户登录的逻辑打开是怎么样的呢?分析这个逻辑,大家也可以去体验一下其他网站的登录功能,从用户的注册到登录最后用户退出,这整个的流程都需要大家细细的品味,并发现其中的规律,并且学以致用。当自己不熟练的时候,学会去借鉴其他人的经验,往往是一个不错的选择。下面就让我们一起来实现一下用户的注册功吧。

1) HTML表单编写前端页面

在 user\templates\user 目录下新建 login.html 文件。并在其中编写如下代码:

登录页

#pwd input{

margin-left:23px

}

用户名:

{ { error }}

密码:

记住用户名:

上述代码理解起来非常的通俗易懂,但是不难发现我们在其中新增了一个记住用户名的小功能,大家想想这个功能又是如何实现的呢?没错它就是通过 COOKIEs 实现的。在前面的章节《Django中COOKIE和Session介绍(一)》中,我们给大家详细的讲述了 COOKIEs与 Session,在本节我们将用到它们,如果忘记的小伙伴请抓紧时复习哦。

2) 编写视图层逻辑代码

在 user\views.py 中编写视图层用户登录逻辑代码,如下所示:

#用户的登录逻辑处理

def login_view(request):

#处理GET请求

if request.method == ‘GET’:

#1, 首先检查session,判断用户是否第一次登录,如果不是,则直接重定向到首页

if ‘username’ in request.session: #request.session 类字典对象

return HttpResponseRedirect(‘/index/allbook’)

#2, 然后检查COOKIE,是否保存了用户登录信息

if ‘username’ in request.COOKIES:

#若存在则赋值回session,并重定向到首页

request.session[‘username’] = request.COOKIES[‘username’]

return HttpResponseRedirect(‘/index/allbook’)

#不存在则重定向登录页,让用户登录

return render(request, ‘user/login.html’)

# 处理POST请求

elif request.method == ‘POST’:

username = request.POST.get(‘username’)

password = request.POST.get(‘password’)

m = hashlib.md5()

m.update(password.encode())

password_m = m.hexdigest()

#判断输入是否其中一项为空或者格式不正确

if not username or not password:

error = ‘你输入的用户名或者密码错误 !’

return render(request, ‘user/login.html’, locals())

#若输入没有问题则进入数据比对阶段,看看已经注册的用户中是否存在该用户

users = User.objects.filter(username=username, password=password_m)

# 由于使用了filter, 所以返回值user是一个数组,但是也要考虑其为空的状态,即没有查到该用户

if not users:

error = ‘用户不存在或用户密码输入错误!!’

return render(request, ‘user/login.html’, locals())

# 返回值是个数组,并且用户名具备唯一索引,当前用户是该数组中第一个元素

users = users[0]

request.session[‘username’] = username

respOnse= HttpResponseRedirect(‘/index/allbook’)

#检查post 提交的所有键中是否存在 isSaved 键

if ‘isSaved’ in request.POST.keys():

#若存在则说明用户选择了记住用户名功能,执行以下语句设置COOKIE的过期时间

response.set_COOKIE(‘username’, username, 60*60*24*7)

return response

完成视图层代码后,记得要配置路由映射关系,如下所示:

from django.urls import path

from user import views

urlpatterns=[

path(‘reg/’,views.reg_view),

path(‘login/’,views.login_view)

]

3)登录页面展示效果

输入数据库中已存在的用户名,但是将密码输入错误,则会有如下的显示:

《html中退出登录怎么写,Django HTML表单实现用户登录退出(含源码)》

图1:用户登录界面

输入正确的密码则会跳转到 index\allbook 页面,如果登录成功后,下次在访问 127.0.0.1/user/login/ 的时候,将将直接跳转到 index\allbook 页面,这就是 session 与 COOKIE 的作用,那么可想而知如果要实现用户的退出功能就需要将它们两个删除。

2. 实现用户的退出功能

用户的退出功能相对来说要简单的多,通过下面代码就可以实现:

def logout_view(request):

#实现退出功能

#删除session

if ‘username’ in request.session:

del request.session[‘username’]

resp = HttpResponseRedirect(‘/user/index’)

#删除COOKIE

if ‘username’ in request.COOKIES:

resp.delete_COOKIE(‘username’)

return resp

#编写视图函数映射关系

urlpatterns = [

#http://127.0.0.1:8000/user/logout

path(‘logout/’, views.logout_view)

]

大家可以自行编写一个简单的网站首页,我们知道退出功能的 button 都会显示在首页边角位置,所以只需要将退出功能的 url 关联到 标签的 href 属性即可实现点击退出的功能了。

我们使用了两节的内容给大家讲述了 Django 如何实现最基本的注册登录以及退出功能,这两节代码较多,也设计到一些逻辑的理解,所以大家要勤加练习,多多复习,才能够熟练掌握。在下一节中,我们将简单介绍 Django 中的静态资源,比如文件的上传下载以及 CSV 文件的生成导出等。


推荐阅读
  • 作为软件工程专业的学生,我深知课堂上教师讲解速度之快,很多时候需要课后自行消化和巩固。因此,撰写这篇Java Web开发入门教程,旨在帮助初学者更好地理解和掌握基础知识。通过详细记录学习过程,希望能为更多像我一样在基础方面还有待提升的学员提供有益的参考。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • Keepalived 提供了多种强大且灵活的后端健康检查机制,包括 HTTP_GET、SSL_GET、TCP_CHECK、SMTP_CHECK 和 MISC_CHECK 等多种检测方法。这些健康检查功能确保了高可用性环境中的服务稳定性和可靠性。通过合理配置这些检查方式,可以有效监测后端服务器的状态,及时发现并处理故障,从而提高系统的整体性能和可用性。 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • 本文探讨了使用JavaScript在不同页面间传递参数的技术方法。具体而言,从a.html页面跳转至b.html时,如何携带参数并使b.html替代当前页面显示,而非新开窗口。文中详细介绍了实现这一功能的代码及注释,帮助开发者更好地理解和应用该技术。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • Webdriver中元素定位的多种技术与策略
    在Webdriver中,元素定位是自动化测试的关键环节。本文详细介绍了8种常用的元素定位技术与策略,包括ID、名称、标签名、类名、链接文本、部分链接文本、XPath和CSS选择器。每种方法都有其独特的优势和适用场景,通过合理选择和组合使用,可以显著提高测试脚本的稳定性和效率。此外,文章还探讨了在复杂页面结构中如何灵活运用这些定位技术,以应对各种挑战。 ... [详细]
  • 2012年9月12日优酷土豆校园招聘笔试题目解析与备考指南
    2012年9月12日,优酷土豆校园招聘笔试题目解析与备考指南。在选择题部分,有一道题目涉及中国人的血型分布情况,具体为A型30%、B型20%、O型40%、AB型10%。若需确保在随机选取的样本中,至少有一人为B型血的概率不低于90%,则需要选取的最少人数是多少?该问题不仅考察了概率统计的基本知识,还要求考生具备一定的逻辑推理能力。 ... [详细]
  • 如何正确安装与使用向日葵智能开机棒:详细步骤与注意事项
    如何正确安装与使用向日葵智能开机棒?本文将详细介绍其安装步骤及使用注意事项。首先,将开机棒插入电源适配器并连接到路由器,确保设备供电正常。接着,检查状态指示灯是否亮起,以确认设备工作状态。若指示灯未亮,请检查电源和连接是否正确。此外,建议在安装过程中遵循产品说明书中的指导,确保每个步骤准确无误。 ... [详细]
  • 为了评估精心优化的模型与策略在实际环境中的表现,Google对其实验框架进行了全面升级,旨在实现更高效、更精准和更快速的在线测试。新的框架支持更多的实验场景,提供更好的数据洞察,并显著缩短了实验周期,从而加速产品迭代和优化过程。 ... [详细]
author-avatar
茶不离
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有