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( ...
随机推荐
- Xen创建新虚拟机
一.添加一个ISO存储: 右键选择"New Storage Repository-" 选择"ISO Library"中的"Windows File S ...
- CodeForces 797C Minimal string:贪心+模拟
题目链接:http://codeforces.com/problemset/problem/797/C 题意: 给你一个非空字符串s,空字符串t和u.有两种操作:(1)把s的首字符取出并添加到t的末尾 ...
- shell 编程之函数
shell 函数的定义和普通的c语言函数定义差不多 function(){ } shell 函数的返回值,可以显示的return 语句,如果没有return 那么就会把最后一条语句的执行结果作为返回 ...
- shell 变量的使用
变量定义 name="xiaoming"; age=12: 变量名和等号之间不能有空格,否则会报错,同时变量名的命名和其他语言的命名规则基本一样 首个字符必须为字母(a-z,A-Z ...
- vue.js初探:计算属性和methods
在vue.js中,计算属性和methods方法的函数相同时,两者的最终执行结果都是相同的.然而不同的是,计算属性是基于它的依赖缓存.计算属性只有在它的相关依赖发生改变时才会重新取值.这就意味着只要 m ...
- C/C++ 知识点---设计模式
在软件工程中,设计模式用来描述在各种不同情况下,要怎么解决问题的一种方案.面向对象设计模式通常以类或对象来描述其中的关系和相互作用,是软件“设计”层次上的问题.使用设计模式可提高代码的重用性和可靠性, ...
- 绿盟RSAS配置小记
拿到了一个漏扫的虚拟机,可是配置一直上不了网,最后是配置扫描端口网卡,并在主网卡上不做网关配置从而得到解决. 漏扫虚拟机的网络配置是这样一共七块桥接网卡,一块是主网卡,其余六块是扫描口网卡. 主网卡只 ...
- Ubuntu安装iNOde
学校使用的是Inode客户端认证上网的.而且还只能使用iNodeSetup3.60-6210版本进行连接,之前使用Ubuntu 32位版本,可以完美地安装并能够连接到网站.由于我的机子是64位的机子, ...
- 学习笔记TF049:TensorFlow 模型存储加载、队列线程、加载数据、自定义操作
生成检查点文件(chekpoint file),扩展名.ckpt,tf.train.Saver对象调用Saver.save()生成.包含权重和其他程序定义变量,不包含图结构.另一程序使用,需要重新创建 ...
- MySql 使用 EF Core 2.0 CodeFirst、DbFirst、数据库迁移(Migration)介绍及示例
dotnet core 2.0 发布已经好几天了,期间也把原来 dotnet core 1.1 的 MVC 项目升级到了 2.0,升级过程还是比较顺利的,变动也不是太多.升级的过程中也少不了 Enti ...
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( ...
一.添加一个ISO存储: 右键选择"New Storage Repository-" 选择"ISO Library"中的"Windows File S ...
题目链接:http://codeforces.com/problemset/problem/797/C 题意: 给你一个非空字符串s,空字符串t和u.有两种操作:(1)把s的首字符取出并添加到t的末尾 ...
shell 函数的定义和普通的c语言函数定义差不多 function(){ } shell 函数的返回值,可以显示的return 语句,如果没有return 那么就会把最后一条语句的执行结果作为返回 ...
变量定义 name="xiaoming"; age=12: 变量名和等号之间不能有空格,否则会报错,同时变量名的命名和其他语言的命名规则基本一样 首个字符必须为字母(a-z,A-Z ...
在vue.js中,计算属性和methods方法的函数相同时,两者的最终执行结果都是相同的.然而不同的是,计算属性是基于它的依赖缓存.计算属性只有在它的相关依赖发生改变时才会重新取值.这就意味着只要 m ...
在软件工程中,设计模式用来描述在各种不同情况下,要怎么解决问题的一种方案.面向对象设计模式通常以类或对象来描述其中的关系和相互作用,是软件“设计”层次上的问题.使用设计模式可提高代码的重用性和可靠性, ...
拿到了一个漏扫的虚拟机,可是配置一直上不了网,最后是配置扫描端口网卡,并在主网卡上不做网关配置从而得到解决. 漏扫虚拟机的网络配置是这样一共七块桥接网卡,一块是主网卡,其余六块是扫描口网卡. 主网卡只 ...
学校使用的是Inode客户端认证上网的.而且还只能使用iNodeSetup3.60-6210版本进行连接,之前使用Ubuntu 32位版本,可以完美地安装并能够连接到网站.由于我的机子是64位的机子, ...
生成检查点文件(chekpoint file),扩展名.ckpt,tf.train.Saver对象调用Saver.save()生成.包含权重和其他程序定义变量,不包含图结构.另一程序使用,需要重新创建 ...
dotnet core 2.0 发布已经好几天了,期间也把原来 dotnet core 1.1 的 MVC 项目升级到了 2.0,升级过程还是比较顺利的,变动也不是太多.升级的过程中也少不了 Enti ...