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( ...
随机推荐
- HDU字符串基础题(1020,1039,1062,1088,1161,1200,2017)
并不是很精简,随便改改A过了就没有再简化了. 1020. Problem Description Given a string containing only 'A' - 'Z', we could ...
- 学习笔记TF035:实现基于LSTM语言模型
神经结构进步.GPU深度学习训练效率突破.RNN,时间序列数据有效,每个神经元通过内部组件保存输入信息. 卷积神经网络,图像分类,无法对视频每帧图像发生事情关联分析,无法利用前帧图像信息.RNN最大特 ...
- Linux 日常常用指令
最近搞了一个阿里ECS,CentOS7,涉及到一些基本的Linux指令,在这里总结一下,在搭环境中常用的一些指令,熟悉这些指令就基本能够使用CentOS进行日常操作了. 更多的可以参考系统自带的 “ ...
- python基础===Python 代码优化常见技巧
Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化.扩展以及文档相关的事情通常需要消耗 8 ...
- 关于他们回答的 "怎样在桌面建一个python GUI的快捷方式" 这个问题
在之前的2个随笔里面,有写过<找到可以解决问题的正确的人>.<如何提问>,说白了就是您需要帮助的时候,您得让对方100%懂你,否则没戏. 那么最近看到这样1个古老的问题,和一些 ...
- XP oracle32位客户端安装找不到orandce11.dll.dbl
同事在XP上装oracle客户端,遇到下面的问题,mark一下. 提示找不到:orandce11.dll.dbl 点继续还会提示这个文件:orancds11.dll.dbl 网上找到解决方法: 删除注 ...
- Java并发工具类 - CountDownLatch
Java并发工具类 - CountDownLatch 1.简介 CountDownLatch是Java1.5之后引入的Java并发工具类,放在java.util.concurrent包下面 http: ...
- Shell Script编程——USB挂载/复制文件/查找文件/压缩文件
PS:$引用变量的时候不要加空格.用了case,while的结构. main文件 #!/bin/bash chmod a+x changedate chmod a+x changemod chmod ...
- asp.net 开发 sql server 转 oracle
前段时间我们公司项目 要把sql server 转oracle 分享一下心得 也记录一下问题 开始我研究了一段时间 然后下载了 oracle 11g 版本 和 PL/SQL(客户端) 和sql ser ...
- [UWP]了解模板化控件(5.1):TemplatePart vs. VisualState
1. TemplatePart vs. VisualState 在前面两篇文章中分别使用了TemplatePart及VisualState的方式实现了相同的功能,其中明显VisualState的方式更 ...
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( ...
并不是很精简,随便改改A过了就没有再简化了. 1020. Problem Description Given a string containing only 'A' - 'Z', we could ...
神经结构进步.GPU深度学习训练效率突破.RNN,时间序列数据有效,每个神经元通过内部组件保存输入信息. 卷积神经网络,图像分类,无法对视频每帧图像发生事情关联分析,无法利用前帧图像信息.RNN最大特 ...
最近搞了一个阿里ECS,CentOS7,涉及到一些基本的Linux指令,在这里总结一下,在搭环境中常用的一些指令,熟悉这些指令就基本能够使用CentOS进行日常操作了. 更多的可以参考系统自带的 “ ...
Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化.扩展以及文档相关的事情通常需要消耗 8 ...
在之前的2个随笔里面,有写过<找到可以解决问题的正确的人>.<如何提问>,说白了就是您需要帮助的时候,您得让对方100%懂你,否则没戏. 那么最近看到这样1个古老的问题,和一些 ...
同事在XP上装oracle客户端,遇到下面的问题,mark一下. 提示找不到:orandce11.dll.dbl 点继续还会提示这个文件:orancds11.dll.dbl 网上找到解决方法: 删除注 ...
Java并发工具类 - CountDownLatch 1.简介 CountDownLatch是Java1.5之后引入的Java并发工具类,放在java.util.concurrent包下面 http: ...
PS:$引用变量的时候不要加空格.用了case,while的结构. main文件 #!/bin/bash chmod a+x changedate chmod a+x changemod chmod ...
前段时间我们公司项目 要把sql server 转oracle 分享一下心得 也记录一下问题 开始我研究了一段时间 然后下载了 oracle 11g 版本 和 PL/SQL(客户端) 和sql ser ...
1. TemplatePart vs. VisualState 在前面两篇文章中分别使用了TemplatePart及VisualState的方式实现了相同的功能,其中明显VisualState的方式更 ...