tornado_登录页面(案例)

news2025/5/15 8:15:50

目录

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当key
            if 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.coloradmin.cn/o/2375935.html

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

相关文章

YOLOv12模型部署(保姆级)

一、下载YOLOv12源码 1.通过网盘分享的文件&#xff1a;YOLOv12 链接: https://pan.baidu.com/s/12-DEbWx1Gu7dC-ehIIaKtQ 提取码: sgqy &#xff08;网盘下载&#xff09; 2.进入github克隆YOLOv12源码包 二、安装Anaconda/pycharm 点击获取官网链接(anaconda) 点击获取…

BGP实验练习1

需求&#xff1a; 要求五台路由器的环回地址均可以相互访问 需求分析&#xff1a; 1.图中存在五个路由器 AR1、AR2、AR3、AR4、AR5&#xff0c;分属不同自治系统&#xff08;AS&#xff09;&#xff0c;AR1 在 AS 100&#xff0c;AR2 - AR4 在 AS 200&#xff0c;AR5 在 AS …

HTML、CSS 和 JavaScript 基础知识点

HTML、CSS 和 JavaScript 基础知识点 一、HTML 基础 1. HTML 文档结构 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.…

数据结构与算法分析实验12 实现二叉查找树

实现二叉查找树 1、二叉查找树介绍2.上机要求3.上机环境4.程序清单(写明运行结果及结果分析)4.1 程序清单4.1.1 头文件 TreeMap.h 内容如下&#xff1a;4.1.2 实现文件 TreeMap.cpp 文件内容如下&#xff1a;4.1.3 源文件 main.cpp 文件内容如下&#xff1a; 4.2 实现展效果示5…

使用 Semantic Kernel 调用 Qwen-VL 多模态模型

使用 Semantic Kernel 调用 Qwen-VL 多模态模型 一、引言 随着人工智能技术的不断发展&#xff0c;多模态模型逐渐成为研究的热点。Qwen-VL 是阿里云推出的大规模视觉语言模型&#xff0c;支持图像、文本等多种输入形式&#xff0c;并能够进行图像描述、视觉问答等多种任务。…

(4)python开发经验

文章目录 1 使用ctypes库调用2 使用pybind11 更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;Qt开发 &#x1f448;&#x1f449;python开发 &#x1f448; 1 使用ctypes库调用 说明&#xff1a;ctypes是一个Python内置的库&#xff0c;可以提供C兼容的数据类型…

深度剖析 GpuGeek 实例:GpuGeek/Qwen3-32B 模型 API 调用实践与性能测试洞察

深度剖析 GpuGeek 实例&#xff1a;GpuGeek/Qwen3-32B 模型 API 调用实践与性能测试洞察 前言 GpuGeek专注于人工智能与高性能计算领域的云计算平台&#xff0c;致力于为开发者、科研机构及企业提供灵活、高效、低成本的GPU算力资源。平台通过整合全球分布式数据中心资源&#…

MindSpore框架学习项目-ResNet药物分类-数据增强

目录 1.数据增强 1.1设置运行环境 1.1.1数据预处理 数据预处理代码解析 1.1.2数据集划分 数据集划分代码说明 1.2数据增强 1.2.1创建带标签的可迭代对象 1.2.2数据预处理与格式化&#xff08;ms的data格式&#xff09; 从原始图像数据到 MindSpore 可训练 / 评估的数…

【MySQL】别名设置与使用

个人主页&#xff1a;Guiat 归属专栏&#xff1a;MySQL 文章目录 1. 别名基础概念2. 列别名设置2.1 基础语法2.2 特殊字符处理2.3 计算字段示例 3. 表别名应用3.1 基础表别名3.2 自连接场景 4. 高级别名技术4.1 子查询别名4.2 CTE别名 5. 别名执行规则5.1 作用域限制5.2 错误用…

【内网渗透】——S4u2扩展协议提权以及KDC欺骗提权

【内网渗透】——S4u2扩展协议提权以及KDC欺骗提权 文章目录 【内网渗透】——S4u2扩展协议提权以及KDC欺骗提权[toc]一&#xff1a;Kerberos 委派攻击原理之 S4U2利用1.1原理1.2两种扩展协议**S4U2Self (Service for User to Self)****S4U2Proxy (Service for User to Proxy)*…

Linux——CMake的快速入门上手和保姆级使用介绍、一键执行shell脚本

目录 一、前言 二、CMake简介 三、CMake与其他常见的构建、编译工具的联系 四、CMake入门 1、CMake的使用注意事项 2、基本的概念和术语 3、CMake常用的预定义变量 4、CMakeLists.txt文件的基本结构 五、上手实操 1、示例 ​编辑 2、一个正式的工程构建 2.1基本构…

如何高效集成MySQL数据到金蝶云星空

MySQL数据集成到金蝶云星空&#xff1a;SC采购入库-深圳天一-OK案例分享 在企业信息化建设中&#xff0c;数据的高效流转和准确对接是实现业务流程自动化的关键。本文将聚焦于一个具体的系统对接集成案例——“SC采购入库-深圳天一-OK”&#xff0c;详细探讨如何通过轻易云数据…

通过POI实现对word基于书签的内容替换、删除、插入

一、基本概念 POI&#xff1a;即Apache POI&#xff0c; 它是一个开源的 Java 库&#xff0c;主要用于读取 Microsoft Office 文档&#xff08;Word、Excel、PowerPoint 等&#xff09;&#xff0c;修改 或 生成 Office 文档内容&#xff0c;保存 为对应的二进制或 XML 格式&a…

FlashInfer - 测试的GPU H100 SXM、A100 PCIe、RTX 6000 Ada、RTX 4090

FlashInfer - 测试的GPU H100 SXM、A100 PCIe、RTX 6000 Ada、RTX 4090 flyfish GPU 技术参数术语 1. Memory bandwidth (GB/s) 中文&#xff1a;显存带宽&#xff08;单位&#xff1a;GB/秒&#xff09; 定义&#xff1a;显存&#xff08;GPU 内存&#xff09;与 GPU 核心…

MongoDB从入门到实战之Windows快速安装MongoDB

前言 本章节的主要内容是在 Windows 系统下快速安装 MongoDB 并使用 Navicat 工具快速连接。 MongoDB从入门到实战之MongoDB简介 MongoDB从入门到实战之MongoDB快速入门 MongoDB从入门到实战之Docker快速安装MongoDB 下载 MongoDB 安装包 打开 MongoDB 官网下载页面&…

Excelize 开源基础库发布 2.9.1 版本更新

Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库&#xff0c;基于 ECMA-376&#xff0c;ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Excel、WPS、OpenOffice 等办公软件创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式&#xf…

Profibus DP主站转Modbus RTU/TCP网关接艾默生流量计与上位机通讯

Profibus DP主站转Modbus RTU/TCP网关接艾默生流量计与上位机通讯 艾默生流量计与Profibus DP主站转Modbus RTU/TCP网关的通讯&#xff0c;是现代工业自动化中的一个关键环节。为了实现这一过程&#xff0c;我们需要了解一些基础概念和具体操作方法。 在工业自动化系统中&…

Linux proc文件系统 内存影射

文章目录 常见的内存分配函数/proc/pid/ 目录解析 用户进程的内存空间分配算法mmap 分配大内存可能不在堆中换为 malloc 现象相同 常见的内存分配函数 malloc / calloc / realloc&#xff08;来自 C 标准库&#xff09; void *malloc(size_t size)&#xff1a;分配 size 字节…

五、Hadoop集群部署:从零搭建三节点Hadoop环境(保姆级教程)

作者&#xff1a;IvanCodes 日期&#xff1a;2025年5月7日 专栏&#xff1a;Hadoop教程 前言&#xff1a; 想玩转大数据&#xff0c;Hadoop集群是绕不开的一道坎。很多小伙伴一看到集群部署就头大&#xff0c;各种配置、各种坑。别慌&#xff01;这篇教程就是你的“救生圈”。 …

电流检测放大器的优质选择XBLW-INA180/INA181

前言&#xff1a; 在当前复杂的国际贸易环境下&#xff0c;关税的增加使得电子元器件的采购成本不断攀升&#xff0c;电子制造企业面临着巨大的成本压力。为了有效应对这一挑战&#xff0c;实现国产化替代已成为众多企业降低生产成本、保障供应链稳定的关键战略。对此芯伯乐推出…