2nd_SE-结对编程1-基于flask框架的四则运算生成器
0x00 Coding
https://coding.net/u/nikochan/p/2nd_SE/git
0x01 写在前面
因为在上一个作业中,是基于python完成的Command程序。那么再不想进行更多改动的基础上完成了这次的作业。选择了Web的方式,更具有挑战性!
Python中的运用较多的web框架是Django和flask。选择Flask主要是因为比较轻量级,API易读上手快。 开始了3天从入门到心塞的自学框架造轮子的不归路...
我自己希望自己的代码能更加pythonic,本次编程遵照下划线命名法进行编码规范。
沉迷于编程让我在周末都没写托福阅读和写作,我有罪!不可赦的那种。
这次实验主要由201421123011 庞伊凡同学负责完成flask框架/app.py的构造、数据交互以及功能实现/function.py。201421123012 赵娅汀同学负责完成html的部分。
思维导图

0x02 功能实现
- 错题重做功能。
- 自动计时功能。能显示用户开始答题后的消耗时间。
- 多语言支持。
- 控制输入。通过正则表达式对 输入题目数和答案的操作进行控制。只有数字才能被成功输入
- 难度分级。
0x03 程序设计
· 程序结构
├── README.md
├── app.py
├── function.py
├── static
├── templates
│ ├── answer.html
│ ├── fault.html
│ ├── index-ct.html
│ ├── index-en.html
│ ├── index.html
│ └── test.html
· 代码细析
·/app.py
这段代码是建立/hello-world/路径,并返回index.html
@app.route('/hello-world/', methods=['GET','POST'])
#@app.route('/hello/<name>')
def hello(name=None):
return render_template('index.html', name=name)
建立
/hello-world/test/页面。并进行html页面中POST的quiz_num,If_int,If_Fraction,If_complex_Fraction的值进行获取。并传给function.py进行主程序的运算。同事返回主程序结果至test.html
@app.route('/hello-world/test/',methods=['GET','POST'])
def show_question():
global number
if request.method == "POST":
number = request.values.get("quiz_num")
easy = str(request.values.get("If_int"))
normal = str(request.values.get("If_Fraction"))
hard = str(request.values.get("If_complex_Fraction"))
quiz=function.main(number , easy , normal, hard)
return render_template("test.html",allists=quiz)
else:
return 'test'
建立
/hello-world/answer的页面。获取上一个页面中POST的用户答案,传入answer[],并进行结果判断后返回allists
@app.route("/hello-world/answer", methods=['GET','POST'])
def check_result():
global number
ans=[]
number=int(number)
if request.method == "POST":
ans=[]
for i in range(number):
ans=request.form.getlist("answer")
print ans
quiz=function.check(ans)
return render_template("answer.html",allists=quiz)
else:
return "Error.This page is not have any POST data."
return render_template("answer.html")
·/function.py
以上是POST的数据分析并返回给
Mode模式选择函数。
def main(number , If_int , If_Fraction , If_complex_Fraction ):
mode=0
global allists
print number
print If_int,If_Fraction,If_complex_Fraction
for i in range(number):
if If_complex_Fraction == '1':
mode=random.randint(1,3)
Mode(mode)
elif If_Fraction=='1':
mode=random.randint(1,2)
Mode(mode)
elif If_int=='1':
calc_int()
else:
print "You didn't post the level data."
return allists
· html页面
进行了正则表达式的匹配,拒绝输入除0-9和/外的任何字符,也不能复制粘贴。
<input type="text" name=quiz_num onkeyup="(this.v=function(){this.value=this.value.replace(/[^0-9-]+/,'');}).call(this)" onblur="this.v();" /></input>
0x04 截图展示
位于Index页面的语言选择:

做题过程展示:

难度分级:

)
0x05 PSP

0x06 小结
这次的实验又有了很多可以总结的东西。这几天比较忙,所以没有在第一时间写完并提交。现在的功能也还不够全面,我仍然要继续修改。包括非法输入的判断等。flask这个框架在学习起来走了不少弯路,也作为分享,提醒自己。并分享其他正在看的人。【虽然感觉可能没啥人看,毕竟自己太不Red。
- 框架写起来相对比较容易,然而关键是传值得时候使我花费了大量时间。这次的数据是通过列表(list)嵌套字典(dict)的方式。自己刚开始没读清楚API就上手去做了,结果是用的二维列表,结果折腾了很久都没有传值成功。小伙伴@201421123012 赵娅汀 的提醒让我仔细看文档之后才发现,可允许的提交方式是
[{'correct': '0', 'ans': u'1/4', 'result': '5/4', 'show': u'1 + 1/4='}, {'correct': '0', 'ans': 0, 'result': '1/4', 'show': u'1/2 - 1/4='}]这样的。经过修改之后才成功POST了数据。
2.结对编程的方式很好,因为两个人的相互讨论从而使解决问题实现了最快的方式。比如在一些函数的实现上,卡壳了。和小伙伴讨论一番便能得出结论。 - 传值成功了取值又是一个问题。自己写的答案在获取的时候使用的是
<input name="xxx">,然后在request.values.get的过程中却只能传输一个answer。我用了多种方法,在html文件添加逻辑判断并传回数组,在app.py文件进行函数调用等方式均不能成功返回并提交到镶嵌的表格中去。后来又自己浏览了API并进行Google。找到了一个新的语句request.form.getlist("answer")这句可以将POST的值以list的方式返回,最终解决了这个大问题。 - html页面单选框想要只选用一个,那么name的值要相等,即可被html解释成同类。否则无法实现单选的效果。
4.我觉得多次反复迭代并不是一个很高效的方法,仅仅是从一个函数迭代到另一个函数,以运行下一个函数作为这个函数的终结。我感觉并不是很好,因为没有返回值的操作会让我们在迭代的过程中丢掉返回值。这个问题影响了我很长时间,后来发现之后只能进行补偿。更好的办法是全部以返回值结束该函数。以后会尽力提高。
5.正因为设置相对正确的返回值,我频繁使用全局变量来完成操作。但是我看了一些书,书上说要尽量避免在python中使用全局变量以后会尽力提高。 - 人要勇于挑战自己,通过写作业的方式去学习新的框架新的语言不失是一种很好的方式,虽然可能会花费一定的时间。不过还是很值得的~
0x07 汉堡包
2nd_SE-结对编程1-基于flask框架的四则运算生成器的更多相关文章
- 结对作业1----基于flask框架的四则运算生成器
011.012结对作业 coding地址:https://coding.net/u/nikochan/p/2nd_SE/git 一.作业描述 由于上次作业我没有按时完成,而且庞伊凡同学编程能力超棒,所 ...
- Python基于Flask框架配置依赖包信息的项目迁移部署小技巧
一般在本机上完成基于Flask框架的代码编写后,如果有接口或者数据操作方面需求需要把代码部署到指定服务器上. 一般情况下,使用Flask框架开发者大多数都是选择Python虚拟环境来运行项目,不同的虚 ...
- 基于Flask框架搭建视频网站的学习日志(一)
------------恢复内容开始------------ 基于Flask框架搭建视频网站的学习日志(一)2020/02/01 一.Flask环境搭建 创建虚拟环境 初次搭建虚拟环境 搭建完虚拟环境 ...
- 基于Flask框架搭建视频网站的学习日志(二)
基于Flask框架搭建视频网站的学习日志(二)2020/02/02 一.初始化 所有的Flask程序都必须创建一个程序实例,程序实例是Flask类的对象 from flask import Flask ...
- 基于Flask框架搭建视频网站的学习日志(三)之原始web表单
基于Flask框架搭建视频网站的学习日志(三)1.原始Web 表单 本节主要用于体验一下前端后端直接数据的交互,样例不是太完善,下一节会加入Flash处理,稍微完善一下页面 (备注:建议先阅读廖雪峰老 ...
- SZhe_Scan碎遮:一款基于Flask框架的web漏洞扫描神器
SZhe_Scan碎遮:一款基于Flask框架的web漏洞扫描神器 天幕如遮,唯我一刀可碎千里华盖,纵横四海而无阻,是谓碎遮 --取自<有匪> 写在前面 这段时间很多时间都在忙着编写该项目 ...
- 结对编程1---基于Flask的四则运算题目生成器
项目代码地址 / WEB应用地址 / 合作伙伴iFurySt博文链接 需求分析 本次程序是基于原有的控制台四则运算器的基础上,改成WEB的形式,同时还增加了一些新的功能.同时因为交互方式的改变,代码也 ...
- 基于Flask框架的Python web程序的开发实战 <一> 环境搭建
最近在看<Flask Web开发基于Python的Web应用开发实战>Miguel Grinberg著.安道译 这本书,一步步跟着学习Flask框架的应用,这里做一下笔记 电脑只安装一个P ...
- 结对编程1 —— 基于GUI和Swing的四则运算题目生成器
合作伙伴 201421123102 王艳秋 201421123106 陈 雄 代码地址 题目描述 我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序.进一步,本次要求把这个程序做成GUI( ...
随机推荐
- jQuery相关知识总结一
1day-jquery 1. 1 jQuery 1概念 * JavaScript(ECMA/DOM/BOM)在实际开发中,使用比较麻烦,有浏览器兼容问题. * JavaScript类库(JS库) 的目 ...
- Android service 服务的应用之电话监听器以及短信监听器
首先建立一个项目工程文件,如下图所示:
- 使用OracleDBLink进行数据库之间对象的访问操作
Oracle中自带了DBLink功能,它的作用是将多个oracle数据库逻辑上看成一个数据库,也就是说在一个数据库中可以操作另一个数据库中的对象,例如我们新建了一个数据database1,我们需要操作 ...
- 【转】C++静态库与动态库
C++静态库与动态库 这次分享的宗旨是——让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择.这里不深入介绍静态库.动态库的底层格式,内存布局等,有兴趣的同学,推荐一 ...
- 【Java学习笔记之二十四】对Java多态性的一点理解
面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...
- (译+注解)node.js的C++扩展入门
声明:本文主要翻译自node.js addons官方文档.部分解释为作者自己添加. 编程环境: 1. 操作系统 Mac OS X 10.9.51. node.js v4.4.22. npm v3.9. ...
- 非极大值抑制(Non-Maximum Suppression,NMS)
概述 非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素,可以理解为局部最大搜索.这个局部代表的是一个邻域,邻域有两个参数可变,一是邻域的维数,二 ...
- 【PHP】Sublime下PHP网站开发指南
Sublime下PHP网站开发指南 作者:白宁超 2017年3月16日11:03:17 摘要:随着单位开发项目的需求,关于政务办公多年来一直使用php开发管理平台.笔者早年asp开发经验算是有些帮助, ...
- TP-Link路由器的设置向导
TP-Link路由器的设置向导.. 一.准备工作: 1.首先是路由器的安装,主要是将路由器电源接上,并通电,然后就是网线的连接.如果是拨号上网用户,请将猫引出的网线插入到TP-Link路由器最特别的一 ...
- 常见的Linux操作系统推荐
常见的Linux操作系统推荐.. ---------------------- Ubuntu系统 这个系统又名乌班图系统,也是一个以桌面应用为主的Linux操作系统,系统分为云平台,服务器版和桌面版. ...
011.012结对作业 coding地址:https://coding.net/u/nikochan/p/2nd_SE/git 一.作业描述 由于上次作业我没有按时完成,而且庞伊凡同学编程能力超棒,所 ...
一般在本机上完成基于Flask框架的代码编写后,如果有接口或者数据操作方面需求需要把代码部署到指定服务器上. 一般情况下,使用Flask框架开发者大多数都是选择Python虚拟环境来运行项目,不同的虚 ...
------------恢复内容开始------------ 基于Flask框架搭建视频网站的学习日志(一)2020/02/01 一.Flask环境搭建 创建虚拟环境 初次搭建虚拟环境 搭建完虚拟环境 ...
基于Flask框架搭建视频网站的学习日志(二)2020/02/02 一.初始化 所有的Flask程序都必须创建一个程序实例,程序实例是Flask类的对象 from flask import Flask ...
基于Flask框架搭建视频网站的学习日志(三)1.原始Web 表单 本节主要用于体验一下前端后端直接数据的交互,样例不是太完善,下一节会加入Flash处理,稍微完善一下页面 (备注:建议先阅读廖雪峰老 ...
SZhe_Scan碎遮:一款基于Flask框架的web漏洞扫描神器 天幕如遮,唯我一刀可碎千里华盖,纵横四海而无阻,是谓碎遮 --取自<有匪> 写在前面 这段时间很多时间都在忙着编写该项目 ...
项目代码地址 / WEB应用地址 / 合作伙伴iFurySt博文链接 需求分析 本次程序是基于原有的控制台四则运算器的基础上,改成WEB的形式,同时还增加了一些新的功能.同时因为交互方式的改变,代码也 ...
最近在看<Flask Web开发基于Python的Web应用开发实战>Miguel Grinberg著.安道译 这本书,一步步跟着学习Flask框架的应用,这里做一下笔记 电脑只安装一个P ...
合作伙伴 201421123102 王艳秋 201421123106 陈 雄 代码地址 题目描述 我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序.进一步,本次要求把这个程序做成GUI( ...
1day-jquery 1. 1 jQuery 1概念 * JavaScript(ECMA/DOM/BOM)在实际开发中,使用比较麻烦,有浏览器兼容问题. * JavaScript类库(JS库) 的目 ...
首先建立一个项目工程文件,如下图所示:
Oracle中自带了DBLink功能,它的作用是将多个oracle数据库逻辑上看成一个数据库,也就是说在一个数据库中可以操作另一个数据库中的对象,例如我们新建了一个数据database1,我们需要操作 ...
C++静态库与动态库 这次分享的宗旨是——让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择.这里不深入介绍静态库.动态库的底层格式,内存布局等,有兴趣的同学,推荐一 ...
面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...
声明:本文主要翻译自node.js addons官方文档.部分解释为作者自己添加. 编程环境: 1. 操作系统 Mac OS X 10.9.51. node.js v4.4.22. npm v3.9. ...
概述 非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素,可以理解为局部最大搜索.这个局部代表的是一个邻域,邻域有两个参数可变,一是邻域的维数,二 ...
Sublime下PHP网站开发指南 作者:白宁超 2017年3月16日11:03:17 摘要:随着单位开发项目的需求,关于政务办公多年来一直使用php开发管理平台.笔者早年asp开发经验算是有些帮助, ...
TP-Link路由器的设置向导.. 一.准备工作: 1.首先是路由器的安装,主要是将路由器电源接上,并通电,然后就是网线的连接.如果是拨号上网用户,请将猫引出的网线插入到TP-Link路由器最特别的一 ...
常见的Linux操作系统推荐.. ---------------------- Ubuntu系统 这个系统又名乌班图系统,也是一个以桌面应用为主的Linux操作系统,系统分为云平台,服务器版和桌面版. ...