[Flask]Flask零基础项目---登录demo

news2025/1/24 9:46:20

借助Flask框架实现模拟用户登录操作;
一步一步的来实现这个登录接口

login.py

from flask import Flask, render_template,request

app = Flask(__name__, template_folder='login')


@app.route('/')
def hello_flask():
    data = request.get_data()
    print(data)
    return render_template("login.html")


if __name__ == '__main__':
    app.run(host='127.0.0.1', port=5000)

template_folder='login' 登录用的html文件放在login文件夹下面;
login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--    <form action="/" method="post" >-->
    <form method="post" >
  	<table align="center" >
  		<tr>
  			<td>姓名:</td>
  			<td><input type="text" name="user" ></td>
  		</tr>
  		<tr>
  			<td>密码:</td>
  			<td><input type="password" name="password" ></td>
  		</tr>
  		<tr>
  			<td><input type="submit"  value="登录"></td>
  			<td>
  				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  				<input type="submit"  value="注册">
  				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <input type="reset"  value="重置">
  			</td>
  		</tr>
  	</table>
  </form>
</body>
</html>

运行login.py后端开启服务,在浏览器请求,前端报错,
请求前:
在这里插入图片描述
请求后:
在这里插入图片描述

后端并未出现明显异常;
后端日志:

Press CTRL+C to quit
b''
127.0.0.1 - - [27/Nov/2022 15:44:56] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [27/Nov/2022 15:45:00] "POST / HTTP/1.1" 405 -

b’’ :这个是我们print(data)这句代码打印的东西,从目前结果看来,后端并未收到前端实际传送回来的数据

从前端报错来看是分方法不允许,这是Flask自己的一种规范导致,路由的默认方法只支持GET方式,其他方式没有被设置;解决方法也比较简单,只需在路由的时候添加: @app.route('/', methods=['get', 'post'])

全部代码

from flask import Flask, render_template, request

app = Flask(__name__, template_folder='login')


@app.route('/', methods=['get', 'post'])
def hello_flask():
    data = request.get_data()
    print(data)
    return render_template("login.html")


if __name__ == '__main__':
    app.run(host='127.0.0.1', port=5000)

启动服务后,前端输入用户名,密码,后端就可以收到数据,接下来对前端传过来的数据做个优化;
全部代码

from flask import Flask, render_template, request

app = Flask(__name__, template_folder='login')


@app.route('/', methods=['get', 'post'])
def hello_flask():
    user = request.form.get('user')
    password = request.form.get('password')
    print(user, '===', password)
    return render_template("login.html")


if __name__ == '__main__':
    app.run(host='127.0.0.1', port=5000)

前端请求后,后端收到的数据

dd === 1212

这样看下来 ,前后端链路算是通了;

请求方法分离

这一部分主要是将get和post方法隔离开,避免影响逻辑出错

定义一个user_dicts ,模拟数据库查询用户名密码数据来做登录校验。

from flask import Flask, render_template, request

app = Flask(__name__, template_folder='login')

user_dicts = {"zhangsan": "aaa", "lisi": "bbb"}


@app.route('/', methods=['GET', 'POST'])
def hello_flask():
    print(request.method)
    if request.method == 'GET':
        return render_template("login.html")
    user = request.form.get('user')
    password = request.form.get('password')
    if user in user_dicts:
        if user_dicts[user] == password:
            return render_template("home.html")
        else:
            error_msg = {"data": "密码错误"}
    else:
        error_msg = {"data": "用户不存在"}

    return render_template("login.html", error_msg=error_msg)


if __name__ == '__main__':
    app.run(host='127.0.0.1', port=5000)

home.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>home</title>
</head>
<body>
<h1>Home page</h1>
</body>
</html>

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--    <form action="/" method="post" >-->
    <form method="post" >
  	<!---name:里面的类容会提交给服务器--->
  	<!-----value:用于指定相应的显示信息--->
  	<!--实际开发过程中用户初始界面只需要用户名和用户密码提交就可以了-->
  	<table align="center" >
  		<tr>
  			<td>用户姓名:</td>
  			<td><input type="text" name="user" ></td>
  		</tr>
  		<tr>
  			<td>用户密码:</td>
  			<td><input type="password" name="password" ></td>
  		</tr>
  		<tr>
  			<td><input type="submit"  value="登录">
            {{ error_msg.data }}
            </td>
  			<td>
  				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <input type="reset"  value="重置">
  			</td>
  		</tr>

  	</table>
  </form>
</body>
</html>

输入一个错误密码的测试
在这里插入图片描述
输入一个用户不存在的测试
在这里插入图片描述

前端优化

出现异常字段标红
在这里插入图片描述
login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--    <form action="/" method="post" >-->
    <form method="post" >
  	<!---name:里面的类容会提交给服务器--->
  	<!-----value:用于指定相应的显示信息--->
  	<!--实际开发过程中用户初始界面只需要用户名和用户密码提交就可以了-->
  	<table align="center" >
  		<tr>
  			<td>用户姓名:</td>
  			<td><input type="text" name="user" ></td>
  		</tr>
  		<tr>
  			<td>用户密码:</td>
  			<td><input type="password" name="password" ></td>
  		</tr>
  		<tr>
  			<td><input type="submit"  value="登录">
            <span style="color: red">{{ error_msg.data }}</span>
            </td>
  			<td>
  				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <input type="reset"  value="重置">
  			</td>
  		</tr>

  	</table>
  </form>
</body>
</html>

短暂的周末又要飞过,加油每一天~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/40158.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

黑白图片和黑白图片上色系统毕业设计,AI黑背图像上色系统设计与实现,AI黑白照片上色系统论文毕设作品参考

功能清单 【后台管理员功能】 系统设置&#xff1a;设置网站简介、关于我们、联系我们、加入我们、法律声明 广告管理&#xff1a;设置小程序首页轮播图广告和链接 留言列表&#xff1a;所有用户留言信息列表&#xff0c;支持删除 会员列表&#xff1a;查看所有注册会员信息&a…

电子商务交易系统的设计与实现(javaee+mysql)

目录 1 概论 1 1.1电子商务交易发展 1 1.1.1电子商务交易 1 1.1.2发展前景&#xff1a; 1 2 系统可行性及需求分析 3 2.1 系统调研 3 2.2 系统可行性分析 3 2.2.1技术可行性分析 3 2.2.2 操作可行性分析 3 2.2.3 社会可行性分析 4 2.2.4可行性分析小结 4 2.3 系统需求分析 4 2.…

Windows10添加群晖磁盘映射,总是提示用户名密码不正确解决办法

在使用群晖NAS时&#xff0c;我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过winr键&#xff0c;输入\\NAS的IP地址&#xff0c;登录设备时总是提示”用户名或密码不正确”。但是实际密码是正确的。 原因描述&#xff1a;Windows 10&#xff08;或更早版本&a…

Android如何自定义服务器DynamicMockServer的使用

在平时开发时经常需要与服务器进行联调&#xff0c;但是服务器开发往往比前端的要滞后。这时候需要我们自己去mock数据来调通流程。 今天给大家介绍一款Android上的MockServer----DynamicMockServer&#xff0c;支持接口调用&#xff0c;静态文件。 DynamicMockServer&#x…

Web 安全:PKI 扫盲

个人博客 在互联网世界&#xff0c;我们广泛采用 TLS 来保护通信安全&#xff0c;这里的安全主要包含两部分内容&#xff1a;身份鉴别、通信加密。身份鉴别是一切的基础&#xff0c;特别当发送消息比较敏感需要加密时&#xff0c;对接收方必然有一个身份“假设”&#xff0c;“…

MacBook Pro M1 Docker 环境安装 Nacos 2.x 版本

MacBook Pro M1 Docker 环境安装 Nacos 2.x 版本 前言 由于 rocksdb 暂不支持 M1 平台&#xff0c;所以使用 Zulu JDK 的小伙伴们运行 Nacos 2.x 版本会报错&#xff0c;网上通用的解决方案是使用 Oracle JDK 来运行 Nacos 2.x 版本&#xff0c;但对于强迫症的我来说&#xf…

图书管理系(统附源码PPT)

图书管理系统1 绪 论1.1 研究背景1.2 研究意义1.3 相关研究现状1.3.1 高校图书管理面临的问题1.3.2 信息化为图书管理带来新变化2 相关技术2.1 JSP 概述2.2 MySQL 数据库技术2.3 Spring2.4 SpringMVC2.5 Dbcp2.6 Maven3 系统分析3.1 需求分析3.1.1 系统的功能需求分析3.1.2 系统…

【Git】一文带你入门Git分布式版本控制系统(必要配置、工作原理、创建/克隆项目)

Git 系列文章目录 Git 专栏参考链接Git&#xff08;一&#xff09;【Git】一文带你入门Git分布式版本控制系统&#xff08;简介&#xff0c;安装&#xff0c;Linux命令&#xff09;文章目录Git 系列文章目录一、Git 的必要配置二、Git 的工作原理三、Git 项目创建1、创建本地项…

【kafka】十四、kafka生产者API

kafka Producer API 1.消息发送流程 kafka的producer发送消息采用的是异步发送的方式。在消息的发送过程中&#xff0c;涉及到了两个线程–main线程和sender线程&#xff0c;以及一个线程共享变量–RecordAccumulator。main线程将消息发送给RecordAccumulator&#xff0c;send…

单向环形链表介绍以及约瑟夫问题分析

❤️一名热爱Java的大一学生&#xff0c;希望与各位大佬共同学习进步❤️ &#x1f9d1;个人主页&#xff1a;周小末天天开心 各位大佬的点赞&#x1f44d; 收藏⭐ 关注✅&#xff0c;是本人学习的最大动力 感谢&#xff01; &#x1f4d5;该篇文章收录专栏—数据结构 目录 单…

不敲代码就能搭建个人博客?快解析内网穿透来助力

记得很多年前看到一句话&#xff0c;“博客是一个人的狂欢”。无论是享受搭建的过程&#xff0c;还是享受创作的乐趣&#xff0c;更多时候博客是在取悦自己。那么&#xff0c;在2022年的今天&#xff0c;搭建个人博客还有意义吗&#xff1f;答案是肯定的&#xff0c;当我们在搜…

Day4: 应用篇-1

应用篇-1 环境安装 应用开发交叉编译环境&#xff0c; 【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.7.pdf 章节4.3.1 在 Ubuntu 中创建目录&#xff1a;/usr/local/arm&#xff0c;命令如下&#xff1a; sudo mkdir /usr/local/arm令将交叉编译器复制到/usr/local/arm 中…

Arduino开发实例-DIY分贝测量仪

DIY分贝测量仪 1、应用介绍 分贝计,它通常用于测量声音的强度和水平。 声音响度是用分贝来衡量的。 从飞机到人类耳语的不同发声介质都有一定的声音响度,以分贝表示。 声波是具有来回运动的纵波,给出高音或低音,如图所示: 声音的响度取决于频率或波长或传播所需的时间。…

APK构建过程-命令行编译

官方对APK构建过程的介绍 官方 - 构建流程介绍 典型 Android 应用模块的构建流程&#xff0c;按照以下常规步骤执行&#xff1a; 编译器将您的源代码转换成 DEX 文件&#xff08;Dalvik 可执行文件&#xff0c;其中包括在 Android 设备上运行的字节码&#xff09;&#xff0c;…

【强化学习论文合集】专栏介绍(订阅前必读)

导读&#xff1a;什么是强化学习&#xff1f; 强化学习&#xff08;Reinforcement Learning, RL&#xff09;&#xff0c;又称再励学习、评价学习或增强学习&#xff0c;是机器学习的范式和方法论之一&#xff0c;用于描述和解决智能体&#xff08;agent&#xff09;在与环境的…

AtCoder Beginner Contest 263 G.Erasing Prime Pairs(二分图最大匹配-网络流)

题目 黑板上有n(n<100)个不同的数&#xff0c;第i个数ai(1<ai<1e7)出现了bi(1<1e9)次&#xff0c; 你每次可以选择当前黑板上存在的两个数x、y&#xff0c;满足xy是质数&#xff0c;擦掉这两个数&#xff0c; 求可以擦掉的最大次数 思路来源 AtCoder Beginner…

[LeetCode周赛复盘] 第 321 场周赛20221127

[LeetCode周赛复盘] 第 321 场周赛20221127 一、本周周赛总结二、 [Easy] 6245. 找出中枢整数1. 题目描述2. 思路分析3. 代码实现三、[Medium]6246. 追加字符以获得子序列1. 题目描述2. 思路分析3. 代码实现四、[Medium] 6247. 从链表中移除节点1. 题目描述2. 思路分析3. 代码实…

Docker-compose详解和LNMP搭建实战

目录 一、Docker-compose简介 1.前言 2.概述 二、Docker-compose安装 三、YAML文件格式及编写注意事项 1.简介 2.使用方法 四、Docker Compose 常用命令 五、Docker Compose 配置常用字段 六、Docker-compose搭建LNMP实战 一、Docker-compose简介 1.前言 我们知道使…

深度学习与总结JVM专辑(三):垃圾回收器—G1(图文+代码)

垃圾收集器G1前言概述停顿时间模型内存布局传统内存布局过时了G1实现的几个关键细节问题铺垫知识&#xff1a;跨代引用铺垫知识&#xff1a;记忆集&#xff0c;卡表&#xff0c;卡页铺垫知识&#xff1a;写屏障插眼往下看G1内存模型分区Region卡片Card堆Heap分代模型分代垃圾收…

网站分享:7个非常好用的电子书网站

❤️作者主页&#xff1a;IT技术分享社区 ❤️作者简介&#xff1a;大家好,我是IT技术分享社区的博主&#xff0c;从事C#、Java开发九年&#xff0c;对数据库、 C#、 Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉&#xff1a; 数据库领域优质创作者&#x1f3c6;&…