内容正文:
2.6 网络应用软件开发第二课时(分层作业)
【基础达标】
1. 程序在编写过程中难免出现错误,需要进行调试,下列说法不正确的是 ( )
A. Flask Web 框架提供了调试功能
B.可以在生产环境中使用调试模式
C.开发人员用电子邮件发送程序运行的错误信息
D.在程序代码中设置 debug=True 打开调试功能
2.小陈编写基于 Flask Web 框架的“花草养护系统 ”,若浏览器访问的URL为“http://192.168.102.4/ view?sensorid=b1”,则显示该系统数据表 sensorlog 中传感器编号为“b1”的所有数据记录。下列关于该信息系统的说法,正确的是 ( )
A.Web 服务器端执行的数据库查询命令是“select * from sensorlog where b1=sensorid”
B.只能通过 PC 端浏览器访问该 Web 服务器
C.服务器端程序代码中,包含路由命令“@app.route("/view")”
D.客户端访问 Web 服务器的端口号是 5000
3.小明搭建了“室内环境监测系统”,将系统工作时的温湿度以及对应的时间数据传输到服务器中,并保存到 SQLite 数据库文件中,他编写程序建立数据库文件的代码如下:
import sqlite3
conn=sqlite3.connect("test.db")
cu=conn.cursor()
cu.execute("create table data(id integer,wendu float,shidu float,time text)")
conn.commit()
cu.close()
conn.close()
下列关于该数据库文件的说法,正确的是 ( )
A.创建的数据库名称为 test
B.创建的数据表中含有 4个字段
C.数据表中存储的温湿度数据只能是整数
D.创建的数据表名称为 cu
4.下列关于SQLite数据库的说法,正确的是( )
A. Python语言只能通过加载SQLite模块来操作SQLite
B.基本操作包括创建数据库和创建数据表,但无法实现更新数据记录
C.其具有独立性,零配置,开放性,占用资源高等特点
D SQLite是一个轻量级、跨平台的关系型数据库
5.使用Python语言对SQLite数据库进行操作,实现打开和关闭名为为data. db的数据库文件。有下列语句命令:
①conn= sqlite3. connect(“data. db")
②cur= conn. cursor()
③import sqlite3
④conn. close( )
⑤cur. close()
要实现上述功能,上述语句执行的先后顺序正确的是
A.①②⑤④③
B.③①②⑤④
C.③①②④⑤
C.①③②④⑤
【巩固提升】
6. 陈子杰同学编写搭建了学生选课系统,学生选完课程后,在对应选课列表中即可看到自己对应的选课的信息,包括课程编号、课程名称、课程类型、课程描述、教师姓名等数据,选好后,点击提交按钮就可将选课信息保存到数据库中,如图a所示。
对应选课的数据库“student.db”中的lesson数据表相关字段设计如图b所示
图b
(1)若要查询上述数据库的lesson数据表中课程教师为“林迪”的记录数据,相应的数据库命令是_(单选,填字母)。
A.SELECT * FROM lesson WHERE 教师姓名="林迪"
B.SELECT * FROM student WHERE 教师姓名="林迪"
C.SELECT * FROM lesson WHERE teacher="林迪"
D.SELECT * FROM student WHERE teacher="林迪"
(2)将采集的数据利用SQLite数据库进行存储,实现打开、查询和关闭student.db数据库文件,将查询到的数据存储,并返回到网页中显示,相关代码如下:
import sqlite3
①cur.execute("SELECT * FROM lesson")
②cur=conn.cursor()
③conn=sqlite3.connect("student.db")
cur.close()
conn.close()
data=cur.fetchall() #返回查询到的数据
return render_template("student.html",result= )
若要实现上述功能,则①②③处语句执行的先后顺序是_____,划线处应填入的代码是_____。
(3)现将一位同学的选课信息导入到文件“student.xlsx”中,如图c所示。并绘制如图d所示的图表,具体代码如下,请在划线处填入合适的代码。
import pandas as pd
import matplotlib.pyplot as plt
plt.rc("font",**{"family":"SimHei"}) #图表显示中文字体
df=pd.read_excel("student.xlsx") #读取数据
df1= ① #根据lesson_id降序排序,取前8行
#根据lesson_type分组,并求得每类课程数量
df2=______________
x=df2.index
y=df2["describe"]
plt.title("选择同一类学科的数量") #设置图表标题
plt.bar(x,y,label="某类学科数量") #绘制垂直柱形图
plt.legend()
plt.show()
【链接高考】
7. 新的一学期,小明迈入大学的校门。大一年级的专业是大类,每个人的选课不尽相同,因此每个人的课表也是不一样的。为了方便同学们之间的交流,小明利用Python编写了一个网络应用程序,每个人可以将自己的课表上传到该网站,可以查看选择同一个课程的同学名单、同为空闲时间段的人员等。该系统服务器端程序采用Flask Web框架编写,服务器的IP地址是192.168.10.30,端口号为80,网站功能页面规划如表所示。
实现上述应用程序的部分Python代码如下:
import sqlite3
from flask import Flask,render_template,redirect
from flask_wtf import FlaskForm
from wtforms import StringField,SubmitField
from wtforms.validators import DataRequired
DATABASE="user.db"
app=Flask(__name__)
class LoginForm(FlaskForm): #创建登录页面的表单
user=StringField("用户名",validators=[DataRequired()])
pwd=StringField("密码",validators=[DataRequired()])
submit=SubmitField("登录")
@app.route("/login",methods=["GET"])
def index():
sname=""
myform=LoginForm()
if myform.validate_on_submit():
user_login=myform.user.data #获取输入的用户名
pwd_login=myform.pwd.data #获取输入的密码
db=sqlite3.connect(DATABASE) #连接数据库
cur=db.cursor()
#在数据表中筛选出输入的用户名对应的数据行
cur.execute("SELECT * FROM userlist WHERE user=%d"%user_login)
pd=cur.fetchall() #获取查找到的所有数据
cur.close() #关闭游标
db.close() #关闭数据库
if pd is not None: #查找到用户名
if pwd_login==pd[2]: #输入密码正确
#跳转到登录后相应子页面,代码略
else:
sname="密码错误,请重新输入"
else:
sname="用户名错误,请重新输入"
myform.pwd.data=""
return render_template("login.html",form=myform,name=sname)
#其他系统子页面路由,代码略
if __name__=="__main__":
app.run()
请回答下列问题:
(1)若用户登录后需要修改课表信息,可在课表管理的页面进行修改,则访问该子页面的地址是http:// 。
(2)在登录页面中,程序中所连接的数据库文件名为______________
(3)新用户注册后的信息保存在数据库中,其用户名和密码保存在 数据表中。
(4)若用户输入的用户名和密码都错误,且输错的用户名未被注册过,则按下“登录”按钮后,显示的界面为 (单选,填字母)。
A.跳转到登录后的相应子页面
B.显示的页面中有“密码错误,请重新输入”
C.显示的页面中有“用户名错误,请重新输入”
参考答案
【基础达标】
1.B 解析:不要在实际的网站应用环境,即生产环境中使用调试模式,否则将会是一个巨大的安全漏洞。
2.C 解析:Web 服务器端执行的数据库查询命令是“select * from sensorlog where sensorid="b1"”。除了 PC 端浏览器,智能终端等其他浏览器也可以访问该 Web 服务器。客户端访问 Web 服务器的端口号如果未进行设置则默认为 80。
3.B 解析:根据代码“sqlite3.connect("test.db")”和“create table data”可知创建的数据库和数据表名称分别是 test.db 和 data。该数据表中含有 4 个字段,分别是 id、wendu、shidu 和 time。数据表中的温湿度数据类型为浮点型(float),可以存储实数。
4.C 解析:SQLite数据库是一款轻量级、跨平台的,关系型数据库,具有独立性、零配置、开放性、占用资源低等特点,其基本操作包括创建,删除查询更新数据记录等, Python语言能通过加载SQLite模块来操作,也可借助第三方软件
5.B 解析:使用基本过程为:导入模块→连接数据库(若数据库对象不存在则创建新数据库文件)→创建游标对象→关闭游标→关闭数据库
【巩固提升】
6. (1)C (2)③②① data (3)①df.sort_values("lesson_id",ascending=False).head(8) ②df1.groupby("lesson_type").count()
解析:(1)若要查询选课数据库的lesson数据表中课程教师为“林迪”的记录数据,查询的数据表是lesson,表示教师的字段名为teacher,所以相应的数据库命令是SELECT * FROM lesson WHERE teacher="林迪"。(2)数据库执行的语句顺序,应该是先连接数据库,再创建游标,然后使用游标去执行查询语句,所以执行顺序为③②①,查询后的数据存入变量data中,需要将查询后的数据返回到student.html网页中显示,故划线处填入代码为data。(3)①处根据lesson_id降序排序,所以排序依据是lesson_id,降序时ascending=False,再使用head(8)或[0:8]取前8行,故填入代码为df.sort_values("lesson_id",ascending=False).head(8)。②处根据lesson_type分组,所以groupby的依据是lesson_type,再求每类课程数量,所以使用count()函数,根据代码“x=df2.index”以及图d可知,分组后lesson_type成为了索引,故填入代码为df1.groupby("lesson_type").count()。
【链接高考】
7. (1)192.168.10.30:80/schedule (2)user.db (3)userlist (4)C
解析:(1)该系统服务端程序采用Flask Web框架编写,服务器的IP地址是192.168.10.30,端口号为80,再根据网站功能页面规划表,可以确定其URL为192.168.10.30:80/schedule。(2)由代码“db=sqlite3.connect (DATABASE)”可知连接的数据库为DATABASE,再由代码“DATABASE="user.db"”确定连接的数据库文件名为user.db。(3)根据程序段中的代码“cur.execute("SELECT * FROM userlist WHERE user=%d"%user_login)”可以确定存储新用户注册后的信息的数据表为userlist。(4)用户名和密码都正确,跳转到登录后相应子页面。用户名正确密码错误,返回“密码错误,请重新输入”。用户名错误,返回“用户名错误,请重新输入”。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$$