连接数据库

methods 中建立一个文件 db.py 分别建立起连接对象和游标对象

  1. #!/usr/bin/env Python
  2. # coding=utf-8
  3.  
  4. import pymysql
  5. conn = pymysql.connect(host="localhost", user="root", passwd="", db="testdb", port=3306, charset="utf8") #连接对象
  6.  
  7. cur = conn.cursor() #游标对象

用户登录

进入到 templates 文件,建立名为 index.html 的文件:

  1. <!DOCTYPE html>
  2. <head>
  3. <meta charset="UTF-8">
  4. <meta name="viewport" content="width=device-width, initial-scale=1" />
  5. <title>Learning Python</title>
  6. </head>
  7.  
  8. <body>
  9. <h2>Login</h2>
  10. <form method="POST">
  11. <p><span>UserName:</span><input type="text" id="username"/></p>
  12. <p><span>Password:</span><input type="password" id="password" /></p>
  13. <p><input type="button" value="login" id="login" /></p>
  14. </form>
  15. <script src="{{static_url('js/jquery-3.2.1.min.js')}}"></script>
  16. <script src="{{static_url('js/script.js')}}"></script>
  17. </body>

其中<meta name="viewport" content="width=device-width, initial-scale=1" />,其目的在将网页的默认宽度(viewport)设置为设备的屏幕宽度(width=device-width),并且原始缩放比例为 1.0(initial-scale=1),即网页初始大小占屏幕面积的 100%。这样做的目的,是让在电脑、手机等不同大小的屏幕上,都能非常好地显示。

编写 js

statics/js/script.js

  1. /**
  2. * Created by fulong on 2017/6/14.
  3. */
  4. $(document).ready(function(){
  5. alert("good");
  6. $("#login").click(function(){
  7. var user = $("#username").val();
  8. var pwd = $("#password").val();
  9. alert("username: "+user);
  10. });
  11. });

hanlers 里面的程序

创建 __init__.py  只要在该目录中加入了这个文件,该目录中的其它 .py 文件就可以作为模块被 Python 引入了。

运行结果

数据传输

前端传输数据

用 ajax() 方法实现数据传输,需要修改 script.js 文件内容:

statics/js/script.js

  1. /**
  2. * Created by fulong on 2017/6/14.
  3. */
  4. $(document).ready(function(){
  5. $("#login").click(function(){
  6. var user = $("#username").val();
  7. var pwd = $("#password").val();
  8. var pd = {"username":user, "password":pwd};
  9. $.ajax({
  10. type:"post",
  11. url:"/",
  12. data:pd,
  13. cache:false,
  14. success:function(data){
  15. alert(data);
  16. },
  17. error:function(){
  18. alert("error!");
  19. },
  20. });
  21. });
  22. });

ajax() 参数说明

  • type:post 还是 get。
  • url:post 或者 get 的地址
  • data:传输的数据,包括三种:(1)html 拼接的字符串;(2)json 数据;(3)form 表单经 serialize() 序列化的。本例中传输的就是 json 数据,这也是经常用到的一种方式。
  • cache:默认为 true,如果不允许缓存,设置为 false.
  • success:请求成功时执行回调函数。本例中,将返回的 data 用 alert 方式弹出来。 alert() 这个东西,目的在于调试,走一步看一步,看看得到的数据是否如自己所要
  • error:如果请求失败所执行的函数。

后端接收数据

在 IndexHandler 类中增加 post(),增加之后的完善代码是:

index.py

  1. #!/usr/bin/env Python
  2. # coding=utf-8
  3.  
  4. import tornado.web
  5.  
  6. class IndexHandler(tornado.web.RequestHandler):
  7. def get(self):
  8. self.render("index.html")
  9.  
  10. def post(self):
  11. username = self.get_argument("username")
  12. password = self.get_argument("password")
  13. self.write(username)

特别注意,在 get 的时候,通过 get_argument() 函数获得 url 的参数,如果是多个参数,就获取最后一个的值。要想获取多个值,可以使用 get_arguments(name, strip=true)

运行之后即可看到结果

验证用户名和密码

在 methods 目录中创建一个readdb.py的文件,专门用来存储读数据用的函数

  1. #!/usr/bin/env Python
  2. # coding=utf-8
  3.  
  4. from methods.db import *
  5.  
  6. def select_table(table, column, condition, value ):
  7. sql = "select " + column + " from " + table + " where " + condition + "='" + value + "'"
  8. cur.execute(sql)
  9. lines = cur.fetchall()
  10. return lines

改写index.py

  1. #!/usr/bin/env Python
  2. # coding=utf-8
  3.  
  4. import tornado.web
  5. import methods.readdb as mrd
  6.  
  7. class IndexHandler(tornado.web.RequestHandler):
  8. def get(self):
  9. self.render("index.html")
  10.  
  11. def post(self):
  12. username = self.get_argument("username")
  13. password = self.get_argument("password")
  14. user_infos = mrd.select_table(table="users",column="*",condition="username",value=username)
  15. if user_infos:
  16. db_pwd = user_infos[0][2]
  17. if db_pwd == password:
  18. self.write("welcome you: " + username)
  19. else:
  20. self.write("your password was not right.")
  21. else:
  22. self.write("There is no thi user.")

运行即可看到结果

Tornado 网站demo 二的更多相关文章

  1. Tornado 网站demo 三

    模板 修改index.py #!/usr/bin/env Python # coding=utf-8 import tornado.web import methods.readdb as mrd c ...

  2. Tornado 网站demo 一

    web服务器的工作过程 创建 listen socket, 在指定的监听端口, 等待客户端请求的到来 listen socket 接受客户端的请求, 得到 client socket, 接下来通过 c ...

  3. 使用IntelliJ IDEA开发SpringMVC网站(二)框架配置

    原文:使用IntelliJ IDEA开发SpringMVC网站(二)框架配置 摘要 讲解如何配置SpringMVC框架xml,以及如何在Tomcat中运行 目录[-] 文章已针对IDEA 15做了一定 ...

  4. 从零开始用 Flask 搭建一个网站(二)

    从零开始用 Flask 搭建一个网站(一) 介绍了如何搭建 Python 环境,以及 Flask 应用基本项目结构.我们要搭建的网站是管理第三方集成的控制台,类似于 Slack. 本篇主要讲解数据如何 ...

  5. thinkphp5项目--企业单车网站(二)

    thinkphp5项目--企业单车网站(二) 项目地址 fry404006308/BicycleEnterpriseWebsite: Bicycle Enterprise Websitehttps:/ ...

  6. 用jekyll制作高大上的网站(二)——实际应用

    最近公司要制作个文档库,直接就可以将jekyll应用到实际中. 模版使用了Jekyll Clean,这么模版相对内部简单一点,学习成本不会很大,而复杂的Minimal Mistakes就当作参考. 模 ...

  7. 如何一步一步用DDD设计一个电商网站(二)—— 项目架构

    阅读目录 前言 六边形架构 终于开始建项目了 DDD中的3个臭皮匠 CQRS(Command Query Responsibility Segregation) 结语 一.前言 上一篇我们讲了DDD的 ...

  8. 用c#开发微信 (20) 微信登录网站 - 扫描二维码登录

    像京东,一号店等网站都实现了用微信来登录的功能,就是用手机上的微信扫一扫网站上的二维码,微信上确认后,即可自动用微信的帐号登录网站. 1 创建网站应用 在微信开放平台创建一个网站应用 https:// ...

  9. Node.js + Express + Mongodb 开发搭建个人网站(二)

    二.路由 1.打开 routes/index.js ,这个意思就是  捕获到访问主页的get请求: 并通过 app.js 分配到对应的路由里: 看到这里,打开 http://127.0.0.1:300 ...

随机推荐

  1. RobotFramework下的http接口自动化Create Http Context关键字的使用

    要想使用HttpLibrary,Create Http Context 关键字的作用相当于是创建了一个http 调用的环境,是必不可少的一个关键字. Create Http Context 关键字需要 ...

  2. 初学 Java Web 开发,从 Servlet 开发

    1. 基本要求:Java 编程基础 有良好的 Java 语言编程基础,这是必须的,在讨论 Web 开发技术时提了一个 Java 编程基础的问题会被鄙视的. 2. 环境准备 (Eclipse + Tom ...

  3. CF908G Original Order

    题目大意: 定义\(R(x) = 每个数在各数位排序后得到的数\) 例如:\(R(321597) = 123579\) 给定一个\(n<=10^{700}\),求\(\sum _{i=1}^n ...

  4. [HNOI2007]紧急疏散

    二分+网络流判定 首先处理出每个人和门间的距离 二分时间,连边时把每个门拆成mid个,一个人能在mid时间内到达,他也可以在这等一会儿,那么这mid个门之间连边 如果可以在x的时间内到达,那么x~mi ...

  5. flask项目部署到阿里云 ubuntu16.04

    title: flask项目部署到阿里云 ubuntu16.04 date: 2018.3.6 项目地址: 我的博客 部署思路参考: Flask Web开发>的个人部署版本,包含学习笔记. 开始 ...

  6. 什么是tcp/ip

    在了解Tcp /Ip之前.我们需要了解几个名词的含义: 什么是IP? IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层:相反,IP层也 ...

  7. Java生成条码二维码

    一.概述 可用barcode4j或zxing等第三方库,推荐zxing. barcode4j资料链接:http://barcode4j.sourceforge.net/ zxing资料链接:https ...

  8. Lintcode212 Space Replacement solution 题解

    [题目描述] Write a method to replace all spaces in a string with%20. The string is given in a characters ...

  9. Spring Boot 2.0(四):使用 Docker 部署 Spring Boot

    Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下. 首先构建一个简单的 Spring Boot 项目, ...

  10. WordPress博客彻底关闭图片缩略图功能的方法

    最近感觉没发几篇文章,然后查看cpanel面板的时候发现不知不觉我的空间突然被占用了很多,不能忍啊,我查看了一下磁盘占用,发现是缩略图搞的鬼,我 的文章中的图片都是保存在七牛中的,只有特色图片是不能使 ...