平价网站建设,wordpress连接不上,建个视频网站多少钱,安徽省交通运输厅门户网站1.定义通讯协议基于前面介绍过的 FLask Web 网站 与 urlib 的访问网站的方法#xff0c;设计一个综合应用实例。它是一个基于 Web 的学生记录管理程序。学生的记录包括 id(学号) 、name(姓名) 、grade(成绩)#xff0c;服务器的作用是建立与维护一个Sqllite 的学生数据库 stu…1.定义通讯协议 基于前面介绍过的 FLask Web 网站 与 urlib 的访问网站的方法设计一个综合应用实例。它是一个基于 Web 的学生记录管理程序。学生的记录包括 id(学号) 、name(姓名) 、grade(成绩)服务器的作用是建立与维护一个Sqllite 的学生数据库 student.db 中的学生记录表 student。 服务器建立一个 Web 网站 同时提供查询学生记录、增加学生记录、删除学生记录等接口服务。服务器为了与客户端通信建立一个opt 的参数如下表opt值含 义init初始化学生表insert增加学生delete删除学生update更改学生select查询学生opt 参数值获取学生记录规定如下如果客户端向服务器发送 optinit 那么服务器创建 students 表并返回是否创建成功如果成功就返回 {msg:OK}如果客户端向服务器发送 optinsert , 同时发送id , name , grade 参数那么服务器向数据库表插入一条学生记录并返回是否插入成功信息如果成功就返回 {msg:OK}如果客户端向服务器发送 optdelete , 同时发送 id 参数那么服务器从数据库表中删除学号为 id 的一条学生记录并返回是否删除成功的信息如果删除成功就返回 {msg:OK}如果客户端向服务器发送 optupdate , 同时发送 id 参数那么服务器从数据库表中更改学号为 id 的一条学生记录并返回是否更改成功的信息如果更改成功就返回 {msg:OK}如果客户端向服务器发送 optselect , 同时发送id 参数那么服务器从数据库表中查询学号为 id 的一条学生记录并返回是否查询成功的信息如果查询成功就返回 {msg:OK}如果客户端不向服务器发送 opt 参数值那么服务器获取所有的学生记录返回给客户端如果成功就返回 {msg:OKdata:rows} , 其中 rows 是学生的记录行的列表。2.服务器程序服务器程序server.py如下import flask
import sqlite3
import json# 初始化一个Flask对象参数__name__是程序的名称
app flask.Flask(__name__)class StudentDB:def __init__(self):self.cursor Noneself.con None# 通过学生类打开一个数据库采用sqlite3.connect来连接def openDB(self):self.con sqlite3.connect(students.db)# 获取Cursor游标对象用于执行sql语句并获得结果self.cursor self.con.cursor()# 关闭连接def closeDB(self):self.con.commit()self.con.close()# 创建一个学生表def initTable(self):res {}try:self.cursor.execute(create table students (id varchar(16) primary key,name varchar(16),grade int))res[msg] OKexcept Exception as err:res[msg] str(err)return res# 插入学生def insertRow(self, id, name, grade):res {}try:self.cursor.execute(insert into students (id,name,grade) values(?,?,?), (id, name, grade))res[msg] OKexcept Exception as err:res[msg] str(err)return res# 删除学生def deleteRow(self, id):res {}try:self.cursor.execute(delete from students where id?, (id,))res[msg] OKexcept Exception as err:res[msg] str(err)return res# 修改学生def updateRow(self, id):res {}try:self.cursor.execute(update students set name?,grade? where id?, (id,))res[smg] OKexcept Exception as err:res[msg] str(err)return res# 获取学生的所有信息def selectRows(self):res {}try:data []self.cursor.execute(select * from students order by id)rows self.cursor.fetchall() # 在 Python 中使用 fetchall() 从数据库文件中提取元素for row in rows:# 每一个学生记录都是一个字典d {id: row[0], name: row[1], grade: row[2]}data.append(d)res[msg] OKres[data] dataexcept Exception as err:res[msg] str(err)return resapp.route(/, methods[GET, POST])
def process():# 获取opt的值opt flask.request.values.get(opt) if opt in flask.request.values else res {}# 创建数据库db StudentDB()db.openDB()if opt init:res db.initTable()elif opt insert:id flask.request.values.get(id) if id in flask.request.values else name flask.request.values.get(name) if name in flask.request.values else grade flask.request.values.get(grade) if grade in flask.request.values else res db.insertRow(id, name, grade)elif opt delete:id flask.request.values.get(id) if id in flask.request.values else res db.deleteRow(id)elif opt update:id flask.request.values.get(id) if id in flask.request.values else res db.updateRow(id)else:res db.selectRows()db.closeDB()return json.dumps(res)if __name__ __main__:app.run()
3.客户端程序客户端程序client.py如下import urllib.request
import urllib.parse
import json# 创建一个student的对象
class Student:def __init__(self, id, name, grade):self.id idself.name nameself.grade gradedef show(self):# 打印方法print(%-16s %-16s %-4d % (self.id, self.name, self.grade))students []
# server的网址
url http://127.0.0.1:5000# 显示主功能界面
def main():print( * 15 主界面 * 14)print(* * 10 1-添加学生信息 * * 10)print(* * 10 2-删除学生信息 * * 10)print(* * 10 3-修改学生信息 * * 10)print(* * 10 4-查询学生信息 * * 10)print(* * 10 5-显示所有学生信息 * * 7)print(* * 10 6-初始化学生列表 * * 8)print(* * 10 0-退出系统 * * 13)print( * 33)# 初始化
# 如果客户端向服务端发送optinit,那么服务器创建students表并返回是否创建成功如果成功就返回{msg:OK}
def initialize():st try:content urllib.request.urlopen(url ?optinit)st content.read()st json.loads(st.decode())st st[msg]except Exception as err:st str(err)if st OK:print(初始成功)else:print(st)return st# 插入学生记录
# 如果客户端向服务器发送optinsert,同时发送id、name、grade参数那么服务器向数据库表插入一条学生记录并返回是否插入成功信息如果如果成功就返回{msg:OK}
def insertRow():# 获取学生的学号、姓名、成绩id input(id)name input(name)while True:grade int(input(grade))if 0 grade 100:breakelse:print(无效成绩!\n请重新输入 范围0~100)if id ! and name ! :s Student(id, name, grade)for x in students:if x.id id:print(id 已经存在)returnst try:# 调用远程数据st id urllib.parse.quote(id) \name urllib.parse.quote(name) \grade str(grade)st st.encode()content urllib.request.urlopen(url ?optinsert, st)st content.read()st json.loads(st.decode())st st[msg]except Exception as err:st str(err)if st OK:insertStudent(s)print(添加成功)else:print(st)else:print(学号、姓名不能为空)# 插入学生记录
def insertStudent(s):global studentsi 0while i len(students) and s.id students[i].id:i 1# 判断表格里面是否存在if i len(students) and s.id students[i].id:print(s.id 已经存在)return Falsestudents.insert(i, s)return True# 删除学生记录
# 如果客户端向服务器发送optdelete,同时发送id参数那么服务器从数据库表中删除学号为id的一条学生记录并返回是否删除成功的信息如果如果成功就返回{msg:OK}
def deleteRow():global studentsid input(id)if id ! :for i in range(len(students)):if students[i].id id:st try:st id urllib.parse.quote(id)st st.encode()# 找到id就调用urllib.request.urlopencontent urllib.request.urlopen(url ?optdelete, st)st content.readline()# 通过json解析数据st json.loads(st.decode())st st[msg]except Exception as err:st str(err)if st OK:del students[i]print(删除成功)else:print(st)break# 更新学生信息
def updateRow():pass# 查询学生信息
def selectRow():pass# 读取学生记录
def readStudents():global studentstry:students.clear()content urllib.request.urlopen(url)data b # 二进制str变量while True:buf content.read(1024) # 每次读取1024字节内容,并且指针指向末尾if len(buf) 0:data bufelse:breakdata data.decode() # 解码 UTF-8# 反系列结构化的数据data json.loads(data)if data[msg] OK:data data[data] # data[data][row0,row1.row2...]for d in data:# 每个d都是一个字典s Student(d[id], d[name], d[grade])students.append(s)except Exception as err:print(err)# 显示所有的学生
def listStudents():global studentsprint(%-16s %-16s %-4s % (id, name, grade))for s in students:# 调用show函数s.show()try:readStudents()while True:main() # 打印菜单s int(input(请选择(0,1,2,3,4,5,6):))if s 0: # 退出系统breakelif s 1: # 添加学生信息insertRow()elif s 2: # 删除学生信息deleteRow()elif s 3: # 修改学生信息updateRow()elif s 4: # 查询学生信息selectRow()elif s 5: # 显示所有学生信息listStudents()elif s 6:initialize() # 初始化学生列表
except Exception as exp:print(exp)
客户端结果实例