tornado_登录页面(案例)

目录

1.基础知识​编辑

2.脚手架(模版)

3.登录流程图(processon)

4.登录表单

4.1后(返回值)任何值:username/password

(4.1.1)app.py

(4.1.2)表单.html

(4.3)login.py(没啥用,充当第二页的跳转页面)

4.1.3返回 用户名+密码 结果

4.2写死 admin/123 ##,返回index首页

(4.2.1app.py)用户名/密码正确,返回index首页,否则,返回error404_n页面

(4.2.2index.html)首页

(4.2.3error.html)404_n

5.注册表单(后台) 

(5.1 app.py的注册部分)

(5.2 register.html 注册表)

 报错:

**404:没有写路由

**500:目录结构 / 内容错误


1.基础知识

Linux写法

2.脚手架(模版)

(1)打印hello world

#!/usr/bin/env python
#-*- coding:utf-8 -*-from tornado import web, httpserver, ioloop
#1.逻辑处理模块
class LoginHandler(web.RequestHandler):def get(self,*args,**kwargs):self.write("hello world")#self.render("login.html")#2.路由
application=web.Application([(r"/login",LoginHandler),])#3.socket服务端
if __name__=='__main__':http_server=httpserver.HTTPServer(application)print("http://127.0.0.1:8080/login")http_server.listen(8080)ioloop.IOLoop.current().start()

(2)网页login

1).py

 self.render("login.html")   #渲染

2)   .html 

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1 style="color:pink;">hi</h1>
</body>
</html>

**报错500,目录结构

3.登录流程图(processon)

4.登录表单

4.1后(返回值)任何值:username/password

**基于这个前端页面,用tornado框架,写后端api接口代码,调用get、post请求。

(4.1.1)app.py
#!/usr/bin/env python
#-*- coding:utf-8 -*-from tornado import web, httpserver, ioloop
#1.逻辑处理模块
class LoginHandler(web.RequestHandler):def get(self,*args,**kwargs):#self.write("hello world")#返回登录页面#self.render("login.html")   #渲染self.render("表单.html")   #渲染def post(self,*args,**kwargs):#验证用户密码(获取)username=self.get_argument("username")passward=self.get_argument("password")print(username,passward)#设置
setting={'template_path':'template'
}#2.路由
application=web.Application([(r"/login",LoginHandler),   #这个对应着/login],**setting)#3.socket服务端
if __name__=='__main__':http_server=httpserver.HTTPServer(application)print("http://127.0.0.1:8080/login")http_server.listen(8080)ioloop.IOLoop.current().start()
(4.1.2)表单.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>表单</title>
</head>
<body><h2>表单</h2><form action="/login" method="post">    <!--这里的、login对应着app.py里面的路由-->账号:<input type="text" name="username"/><br/>密码:<input type="password" name="password"/><br/><input type="submit" value="登录"/></form></body>
</html>
(4.3)login.py(没啥用,充当第二页的跳转页面)
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1 style="color:pink;">hi</h1>
</body>
</html>
4.1.3返回 用户名+密码 结果

4.2写死 admin/123 ##,返回index首页

(4.2.1app.py)用户名/密码正确,返回index首页,否则,返回error404_n页面
#!/usr/bin/env python
#-*- coding:utf-8 -*-from tornado import web, httpserver, ioloop
#1.逻辑处理模块
#登录
class LoginHandler(web.RequestHandler):def get(self,*args,**kwargs):#self.write("hello world")#返回登录页面#self.render("login.html")   #渲染self.render("表单.html")   #渲染def post(self,*args,**kwargs):#验证用户密码(获取)username=self.get_argument("username")passward=self.get_argument("password")#print(username,passward)#写死,if正确进入if username=='admin' and passward=='123':self.redirect('/index')##跳转else:self.render('error.html')##跳转首页面模块
class IndexHandler(web.RequestHandler):def get(self,*args,**kwargs):self.render("index.html")#设置
setting={'template_path':'template'
}#2.路由
application=web.Application([(r"/login",LoginHandler),   #这个对应着/login(r"/index",IndexHandler),##首页面路由],**setting)#3.socket服务端
if __name__=='__main__':http_server=httpserver.HTTPServer(application)print("http://127.0.0.1:8080/login")http_server.listen(8080)ioloop.IOLoop.current().start()
(4.2.2index.html)首页
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>login2</title>
</head>
<body><h2 style="color:pink">I am index</h2></body>
</html>
(4.2.3error.html)404_n
    <h2 style="color:purple">输入错误404_n</h2>

5.注册表单(后台) 

(5.1 app.py的注册部分)
###全局变量
user_info={}
###注册 post获取
class RegisterHandler(web.RequestHandler):def post(self,*args,**kwargs):email = self.get_argument("emial")username = self.get_argument("username")password = self.get_argument("password")password1 = self.get_argument("password1")access = self.get_argument("access", default=None)if access:  #用email当keyif password==password1:UNER_INFO[email]={"username":username,"password":password,}self.render("success.html",info={'stauts':True,'info':'注册成功','second':3})else:self.render('error.html', info={'status': False,'info': '密码不一致','second': 3,  # 倒计时3秒'url': '/register'})  # 跳转else:self.render('error.html', info={'status': False,'info': '请同意协议','second': 3,  # 倒计时3秒'url':'/register'})  # 跳转def get(self,*args,**kwargs):self.render("表单.html",type='register')###收到数据后要存储起来
###用数据库/全局变量(√)上面
(5.2 register.html 注册表)
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>用户注册</title><style>body {font-family: Arial, sans-serif;background-color: #f4f4f4;display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;}.container {background-color: white;padding: 20px;border-radius: 5px;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);width: 300px;}.container h2 {text-align: center;margin-bottom: 20px;}.form-group {margin-bottom: 15px;}.form-group label {display: block;margin-bottom: 5px;}.form-group input[type="email"],.form-group input[type="text"],.form-group input[type="password"] {width: 100%;padding: 8px;box-sizing: border-box;border: 1px solid #ccc;border-radius: 4px;}.form-group input[type="checkbox"] {margin-right: 5px;}.form-group button {width: 100%;padding: 10px;background-color: #4CAF50;color: white;border: none;border-radius: 4px;cursor: pointer;}.form-group button:hover {background-color: #45a049;}.form-group .reset {background-color: #ccc;}.form-group .reset:hover {background-color: #bbb;}</style>
</head>
<body><div class="container"><h2>用户注册</h2><form><div class="form-group"><label for="email">邮箱</label><input type="email" id="email" name="email" required></div><div class="form-group"><label for="username">用户名</label><input type="text" id="username" name="username" value="admin" required></div><div class="form-group"><label for="password">密码</label><input type="password" id="password" name="password" required></div><div class="form-group"><label for="confirm-password">确认密码</label><input type="password" id="confirm-password" name="confirm-password" required></div><div class="form-group"><input type="checkbox" id="agreement" name="agreement" required><label for="agreement">接受 用户协议</label></div><div class="form-group"><button type="reset" class="reset">重置</button><button type="submit">注册</button></div></form></div>
</body>
</html>

 报错:

**404:没有写路由

**500:目录结构 / 内容错误

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

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

相关文章

Android学习总结之自定义view设计模式理解

面试题 1&#xff1a;请举例说明自定义 View 中模板方法模式的应用 考点分析 此问题主要考查对模板方法模式的理解&#xff0c;以及该模式在 Android 自定义 View 生命周期方法里的实际运用。 回答内容 模板方法模式定义了一个操作的算法骨架&#xff0c;把一些步骤的实现延…

【Scrapy】简单项目实战--爬取dangdang图书信息

目录 一、基本步骤 1、新建项目 &#xff1a;新建一个新的爬虫项目 2、明确目标 &#xff08;items.py&#xff09;&#xff1a;明确你想要抓取的目标 3、制作爬虫 &#xff08;spiders/xxspider.py&#xff09;&#xff1a;制作爬虫开始爬取网页 4、存储内容 &#xff08;p…

开源CMS系统的SEO优化功能主要依赖哪些插件?

在当今互联网时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;是网站获取流量的核心手段之一。开源内容管理系统&#xff08;CMS&#xff09;因其灵活性和丰富的插件生态&#xff0c;成为许多开发者和企业的首选。本文将以主流开源CMS为例&#xff0c;深入解析其SEO优…

在 JMeter 中使用 BeanShell 获取 HTTP 请求体中的 JSON 数据

在 JMeter 中&#xff0c;您可以使用 BeanShell 处理器来获取 HTTP 请求体中的 JSON 数据。以下是几种方法&#xff1a; 方法一&#xff1a;使用前置处理器获取请求体 如果您需要在发送请求前访问请求体&#xff1a; 添加一个 BeanShell PreProcessor 到您的 HTTP 请求采样器…

在 WSL (Windows Subsystem for Linux) 中配置和安装 Linux 环境

在 WSL (Windows Subsystem for Linux) 中配置和安装 Linux 环境 WSL 允许你在 Windows 上运行 Linux 环境&#xff0c;以下是详细的配置和安装指南。 1. 安装前的准备工作 系统要求 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11 64 位系统 虚…

AlphaFold蛋白质结构数据库介绍

AlphaFold Protein Structure Database (AlphaFold DB) 是 DeepMind + EMBL-EBI 合作开发的公开蛋白质结构预测数据库,是利用 AlphaFold2/AlphaFold3 AI模型 预测的全基因组级蛋白质三维结构库。 网址: https://alphafold.ebi.ac.uk 项目内容主办单位DeepMind + EMBL-EBI上线…

3.2goweb框架GORM

GORM 是 Go 语言中功能强大的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;支持 MySQL、PostgreSQL、SQLite、SQL Server 等主流数据库。以下是 GORM 的核心概念和用法详解&#xff1a; ​​一、基础入门​​ 1. 安装 go get -u gorm.io/gorm go get -u gorm.io…

第三部分:特征提取与目标检测

像边缘、角点、特定的纹理模式等都是图像的特征。提取这些特征是许多计算机视觉任务的关键第一步&#xff0c;例如图像匹配、对象识别、图像拼接等。目标检测则是在图像中找到特定对象&#xff08;如人脸、汽车等&#xff09;的位置。 本部分将涵盖以下关键主题&#xff1a; …

Canvas基础篇:图形绘制

Canvas基础篇&#xff1a;图形绘制 图形绘制moveTo()lineTo()lineTo绘制一条直线代码示例效果预览 lineTo绘制平行线代码示例效果预览 lineTo绘制矩形代码示例效果预览 arc()arc绘制一个圆代码实现效果预览 arc绘制一段弧代码实现效果预览 arcTo()rect()曲线 结语 图形绘制 在…

瑞芯微芯片算法开发初步实践

文章目录 一、算法开发的一般步骤1.选择合适的深度学习框架2.对于要处理的问题进行分类&#xff0c;是回归问题还是分类问题。3.对数据进行归纳和整理4.对输入的数据进行归一化和量化&#xff0c;保证模型运行的效率和提高模型运行的准确度5.在嵌入式处理器上面运行模型&#x…

计算机毕业设计--基于深度学习(U-Net与多尺度ViT)的模糊车牌图像清晰化复原算法设计与实现(含Github代码+Web端在线体验链接)

基于深度学习的U-Net架构下多尺度Transformer车牌图像去模糊算法设计与实现 如果想对旧照片进行模糊去除&#xff0c;划痕修复、清晰化&#xff0c;请参考这篇CSDN作品&#x1f447; 计算机毕业设计–基于深度学习的图像修复&#xff08;清晰化划痕修复色彩增强&#xff09;算…

(Go Gin)Gin学习笔记(四)Gin的数据渲染和中间件的使用:数据渲染、返回JSON、浅.JSON()源码、中间件、Next()方法

1. 数据渲染 1.1 各种数据格式的响应 json、结构体、XML、YAML类似于java的properties、ProtoBuf 1.1.1 返回JSON package mainimport ("github.com/gin-gonic/gin""net/http" )func main() {r : gin.Default()r.POST("/demo", func(res *gi…

实验:串口通信

/************************************************* * AT89C52 串口通信实验&#xff08;实用修正版&#xff09; * 特点&#xff1a; * 1. 解决所有编译警告 * 2. 保持代码简洁 * 3. 完全功能正常 ************************************************/ #include <re…

智驾赛道的诺曼底登陆,Momenta上海车展雄起

作者 |芦苇 编辑 |德新 今年的上海车展依旧热闹非凡&#xff0c;但火热的车市背后也是暗流涌动。尤其对智驾供应商而言&#xff0c;「智驾平权」带动了解决方案大量上车&#xff0c;各大主机厂纷纷选定各自的主要供应商&#xff0c;这也意味着赛道机会越发收敛。 正如汽车品牌…

Java 事务详解

目录 一、事务的基本概念1.1 什么是事务?1.2 事务的 ACID 特性二、Java 事务管理的实现方式2.1 JDBC 事务管理2.2 Spring 事务管理2.2.1 添加 Spring 依赖2.2.2 配置 Spring 事务管理2.2.3 使用 Spring 事务注解三、事务隔离级别四、最佳实践4.1 尽量缩小事务范围4.2 合理选择…

DirectX12(D3D12)基础教程七 深度模板视图\剔除\谓词

本章主要讲遮挡&#xff0c;作者认为比较复杂有难度的知识点&#xff0c;作为基础教程不会深入讲解。 GPU渲染管线 主要包括以下阶段 输入装配&#xff08;IA&#xff09;&#xff1a;读取顶点数据 &#xff0c;定义顶点数据结构顶点着色&#xff08;VS&#xff09;&#xf…

温补晶振(TCXO)稳定性优化:从实验室到量产的关键技术

在现代通信、航空航天、5G基站等对频率稳定性要求极高的领域&#xff0c;温补晶振&#xff08;TCXO&#xff09;扮演着不可或缺的角色。其稳定性直接影响系统的性能与可靠性&#xff0c;因此&#xff0c;对TCXO稳定性优化技术的研究与实践至关重要。 一、温度补偿算法&#xff…

C++,设计模式,【建造者模式】

文章目录 通俗易懂的建造者模式&#xff1a;手把手教你造电脑一、现实中的建造者困境二、建造者模式核心思想三、代码实战&#xff1a;组装电脑1. 产品类 - 电脑2. 抽象建造者 - 装机师傅3. 具体建造者 - 电竞主机版4. 具体建造者 - 办公主机版5. 指挥官 - 装机总控6. 客户端使…

前端基础之《Vue(13)—重要API》

重要的API 一、nextTick() 1、写法 Vue.$nextTick()或者this.$nextTick() 原因&#xff1a; set操作代码是同步的&#xff0c;但是代码背后的行为是异步的。set操作修改声明式变量&#xff0c;触发re-render生成新的虚拟DOM&#xff0c;进一步执行diff运算&#xff0c;找到…

Windows 中搭建 browser-use WebUI 1.4

目录 1. 背景介绍2. 搭建过程3. 补充 1. 背景介绍 背景&#xff1a;想要在 Windows 中复现 browser-use WebUI pickle反序列化漏洞&#xff0c;该漏洞在 v1.7 版本中已经修复&#xff0c;所以需要搭建 小于 1.7 版本的环境&#xff0c;我这里搭建的是 1.4 版本。 项目地址&am…