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( ...
随机推荐
- 微信小程序(有始有终,全部代码)开发--- 新增【录音】以及UI改进
开篇语 寒假发了一篇练手文章,不出意外地火了: <简年15: 微信小程序(有始有终,全部代码)开发---跑步App+音乐播放器 > 后来又发了BUG修复的版本,出乎意料的火了: 简年18: ...
- Trailing Zeroes (III)
You task is to find minimal natural number N, so that N! contains exactly Q zeroes on the trail in d ...
- akoj-1076-Encoding
Encoding Time Limit:1000MS Memory Limit:65536K Total Submit:62 Accepted:35 Description Given a stri ...
- Android 开发中常见的注意点
这里总结了Android开发中常用的注意点.只有总结,没有展开举例讲解,展开的话,一个点都可以写一篇文章了..... 这类问题都一定不要犯. 重要的事情说三遍!!! 说三遍!!! 遍!!! 资源 不允 ...
- [算法题] Two Sum
题目内容 题目来源:LeetCode Given an array of integers, return indices of the two numbers such that they add ...
- Java入门——(1)Java编程基础
Java入门--(1)Java编程基础 第二章 Java编程基础 JAVA 代码的基本格式: 修饰符 class 类名{ 程序代码 } 2.1关键字:赋予了特殊含义的单词. 2.2标识符: ...
- 使用MySQL-Proxy读写分离时的注意事项
在动手操作前最好先安装好MySQL-Proxy,并配置好MySQL主从服务器.补充:新版MySQL已经内建支持 延迟问题 读写分离不能回避的问题之一就是延迟,可以考虑Google提供的SemiSync ...
- [INS-30060]:Check for group existence failed
--[INS-30060]:Check for group existence failed -------------------------------------------------2013 ...
- python---scrapy之MySQL同步存储
假设我们已经能获取到item里定义的字段的数据,接下来就需要保存item的数据到mysql数据库. pipeline用来存储item中的数据,将爬取到的数据进行二次处理 首先,要做的准备的工作,安装M ...
- C++基本知识点总结(网摘)
原文出处:[Fei Guo] 1. 结构体和共同体的区别. 定义: 结构体struct:把不同类型的数据组合成一个整体,自定义类型. 共同体union:使几个不同类型的变量共同占用一段内存. 地址: ...
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( ...
开篇语 寒假发了一篇练手文章,不出意外地火了: <简年15: 微信小程序(有始有终,全部代码)开发---跑步App+音乐播放器 > 后来又发了BUG修复的版本,出乎意料的火了: 简年18: ...
You task is to find minimal natural number N, so that N! contains exactly Q zeroes on the trail in d ...
Encoding Time Limit:1000MS Memory Limit:65536K Total Submit:62 Accepted:35 Description Given a stri ...
这里总结了Android开发中常用的注意点.只有总结,没有展开举例讲解,展开的话,一个点都可以写一篇文章了..... 这类问题都一定不要犯. 重要的事情说三遍!!! 说三遍!!! 遍!!! 资源 不允 ...
题目内容 题目来源:LeetCode Given an array of integers, return indices of the two numbers such that they add ...
Java入门--(1)Java编程基础 第二章 Java编程基础 JAVA 代码的基本格式: 修饰符 class 类名{ 程序代码 } 2.1关键字:赋予了特殊含义的单词. 2.2标识符: ...
在动手操作前最好先安装好MySQL-Proxy,并配置好MySQL主从服务器.补充:新版MySQL已经内建支持 延迟问题 读写分离不能回避的问题之一就是延迟,可以考虑Google提供的SemiSync ...
--[INS-30060]:Check for group existence failed -------------------------------------------------2013 ...
假设我们已经能获取到item里定义的字段的数据,接下来就需要保存item的数据到mysql数据库. pipeline用来存储item中的数据,将爬取到的数据进行二次处理 首先,要做的准备的工作,安装M ...
原文出处:[Fei Guo] 1. 结构体和共同体的区别. 定义: 结构体struct:把不同类型的数据组合成一个整体,自定义类型. 共同体union:使几个不同类型的变量共同占用一段内存. 地址: ...