Demo体验:计时器 - Hello, Flask!

难度:1

涉及知识点:URL变量

- - - - -

我们经常在一些网站上看到倒计时,比如购物网站上的秒杀倒计时,或是考试网站上的距离高考还剩多少天……

我们今天就用Flask和JavaScript(jQuery)来实现一个在线计时器,具体的User Story:可以在首页点击不同的时间按钮进入计时

计时结束后会有弹窗和铃声提示

可以在输入框里输入参数进入相应的计时,比如“34、23s、20m、2h”

可以通过在url里传入时间来开始计时,比如:

项目结构

|-Timer-Flask 项目名称

|-app.py

|-templates/ 模板文件夹

|-index.html

|-static/

|-beep.mp3 计时结束铃声

|-favicon.ico 站点图标

|-style.css

|-js/

|-progressbar.js

|-jquery.min.js

|-venv/ 虚拟环境

实现代码

主程序:app.py

import re

from flask import Flask, render_template, url_for, redirect, request, flash

app = Flask(__name__)

app.config['SECRET_KEY'] = 'a very secret string'

@app.route('/')

def index():

return redirect(url_for('timer', num=11*60+11))

@app.route('/s')

@app.route('/')

def timer(num):

return render_template('index.html', num=num)

@app.route('/custom', methods=['GET', 'POST'])

def custom():

time = request.form.get('time', 180)

# 使用正则表达式来验证输入的字符

m = re.match('\d+[smh]?$', time)

if m is None:

flash(u'请输入一个有效的时间,例如34、20s、15m、2h')

return redirect(url_for('index'))

if time[-1] not in 'smh':

return redirect(url_for('timer', num=int(time)))

else:

type = {'s': 'timer', 'm': 'minutes', 'h': 'hours'}

return redirect(url_for(type[time[-1]], num=int(time[:-1])))

@app.route('/m')

def minutes(num):

return redirect(url_for('timer', num=num*60))

@app.route('/h')

def hours(num):

return redirect(url_for('timer', num=num*3600))

@app.errorhandler(404)

def page_not_fouond(e):

flash(u'访问地址出错了,鼠标放在问号上了解更多: )')

return redirect(url_for('timer', num=244))

计时的功能主要用JavaScript(jQuery)实现,在index.html,传递变量给JavaScript:

{% block scripts %}

var Minutes = {{ num }};

{% endblock %}

另外,在这个APP里,因为表单很小,所以没有使用Flask-WTF。表单部分:

然后在视图函数里,我使用request来获取数据,使用正则表达式验证数据:

@app.route('/custom', methods=['GET', 'POST'])

def custom():

# 设置180为默认值,避免提交空白表单产生400错误

time = request.form.get('time', 180)

# 使用正则表达式验证数据

m = re.match('\d+[smh]?$', time)

if m is None:

flash(u'请输入一个有效的时间,例如34、20s、15m、2h')

return redirect(url_for('index'))

if time[-1] not in 'smh':

return redirect(url_for('timer', num=int(time)))

else:

type = {'s': 'timer', 'm': 'minutes', 'h': 'hours'}

return redirect(url_for(type[time[-1]], num=int(time[:-1])))

下一次会谈一下表单的几种不同的验证方式和一些处理技巧。

完整的实现见源码(链接在底部),欢迎fork和patch(或是star:)。

相关知识点URL变量

大部分现代的网站(app)都会有一个美观简洁的URL,比如http://www.example.com/user/kitty。在Flask里,我们通过在URL里设置变量来实现这个功能,比如说上面的URL,对应的路由就是:

app.route('/user/')

这个可以作为参数传递到视图函数里,我们还可以使用Flask提供的转换器,以的形式来转换变量:

@app.route('/user/')

def show_user_profile(username):

# show the user profile for that user

return 'User%s' % username

@app.route('/post/')

def show_post(post_id):

# show the post with the given id, the id is an integer

return 'Post%d' % post_id

使用这个特性,计时器实现了在地址后填入参数就可以进入相应的计时。

最终效果

- - - - -

更多关于Flask的优质内容,欢迎关注Hello, Flask! - 知乎专栏。

python flask倒计时_Flask实践:计时器相关推荐

  1. python flask 教程_Flask 教程 第一章:Hello, World!

    一趟愉快的学习之旅即将开始,跟随它你将学会用Python和Flask来创建Web应用.上面的视频包含了整个教程的内容预览(译者注:视频见原文).通过学习本章内容,你将学会如何创建一个Flask项目,并 ...

  2. python flask分页_flask 分页

    #!usr/bin/env python # -*- coding:utf-8 -*- from urllib import urlencode class Pagination(object): & ...

  3. flask python web开发 可视化开发_Python + Flask 项目开发实践系列六

    今天开始我们讲讲Flask Web实践项目开发中的查看详情功能是如何实现的. Step1:html 部分 lists +="<tr>"+ //拼凑一段html片段 &q ...

  4. python web开发项目 源码_Python + Flask 项目开发实践系列七

    对于 Python + Flask 这种灵活的web开发框架,在前面的六个系列文章中详细的进行了说明,主要讲到了页面的首页加载时的页面渲染,增加功能,删除功能,修改功能,查询功能,查询详情功能等一些页 ...

  5. python flask框架教程_Flask框架从入门到实战

    Flask简介: Flask是一个使用 Python 编写的轻量级 Web 应用框架,基于 WerkzeugWSGI工具箱和 Jinja2模板引擎.使用 BSD 授权. Flask也被称为 " ...

  6. python flask跨域_Flask框架踩坑之ajax跨域请求实现

    Python flask ajax 请夜影驱动编程小编今天和大家分享后端并且能获得数据,但是...@app.route('/search',methods=[ 'POST']) def search( ...

  7. python flask 项目实践

    架构:python+ flask +marshmallow+itsdangerous+pymysql 数据库:mysql 实现功能:登录.验证码.鉴权.用户.上传.下载.错误统一处理 api格式: r ...

  8. Taffy自动化测试框架Web开发,Python Flask实践详解

    1. 前言 最近为Taffy自动化测试框架写了个页面,主要实现了用例管理.执行,测试报告查看管理.发送邮件及配置等功能. 本页面适用所有基于taffy/nose框架编写的自动化测试脚本,或基于unit ...

  9. python flask高级编程之restful_('Python Flask高级编程之RESTFul API前后端分离精讲',),全套视频教程学习资料通过百度云网盘下载...

    资源详情 r n t某课网好评度100%的Python Flask高级编程之RESTFul API前后端分离精讲 r n t t t第1章 随便聊聊 r n t t t聊聊Flask与Django,聊 ...

  10. python开发个人博客_手把手教你用 Python + Flask 搭建个人博客

    Python 的语言特性使得自身编写 Web 框架极其容易,现在已经有上百种用 Python 编写的 Web 开发框架,其中用户量最大的两个就是 Django 和 Flask. Django 和 Fl ...

最新文章

  1. php opcache 坑,PHP7 opcache缓存清理问题
  2. 《秦时明月世界》手游如何用Unity定制化渲染管线?
  3. mapreduce,map后面跟map是什么操作???
  4. (软件工程复习核心重点)第十二章软件项目管理-第一节:软件项目管理综述、估算软件规模和工作量估算
  5. Java中的新生代、老年代和永久代
  6. Keil(MDK-ARM-STM32)介绍、下载、安装与注册
  7. 高中必备学习软件_10个适合高中生学习的网站amp;软件,完全免费,9科全覆盖!...
  8. 从零开始的LaTex生活
  9. 105个上榜!2020年工业互联网试点示范项目名单公布
  10. 阿里巴巴在知乎上又出事了
  11. C语言精练教程:连载中
  12. 程序逸的Java项目之旅-图书管理系统之环境的搭建
  13. lg g5 android,【LGG5SE评测】Android中的SE 模块化LG G5 SE评测(全文)_LG G5 SE_手机评测-中关村在线...
  14. Charles 乱码解决办法
  15. C语言常见语法——运算符和表达式
  16. Linux 修改远程默认端口 22
  17. 登录拦截之后,登录页面出现在iframe的src里面
  18. 2021-2027全球与中国重量稀释仪市场现状及未来发展趋势
  19. php7.4.30 | php8.1.12 源码安装zip扩展
  20. arch linux (manjaro) 下运行tim和qq

热门文章

  1. matlab实现长除法,【网安智库】基于长除法的BCH(15,7)译码算法
  2. AutoCAD许可、AutoCAD许可分析、分析许可
  3. MATLAB程序设计的绘图函数
  4. 威纶触摸屏485轮询通讯_威纶触摸屏Modbus TCP\RTU\ASCII通信视频教程
  5. python npy文件与mat文件的保存与读取
  6. csdn 挣积分和c币方法指南
  7. mysql正则mybatis中用法_SQL正则表达式及mybatis中使用正则表达式
  8. MySQL 管理表记录
  9. linux密码忘记重新设置密码
  10. C语言符号意思(看了必懂系列)