1、1.7.1 Web学生管理程序学生管理程序学生的记录包括学号No、姓名Name、性别Sex与年龄Age,服务器的作用是建立与维护一个Sqllite的学生数据库students.db中的学生记录表students:create table students(No varchar(16)primary key,Name varchar(16),Sex varchar(8),Age int)服务器建立一个Web网站,同时提供查询学生记录、增加学生记录、删除学生记录等接口服务。服务器为了与客户端通讯,建立一个opt的参数如表1-5-1所示:opt值值含义含义init初始化学生表insert增加学生de
2、lete删除学生 获取学生记录如果客户端向服务器发送opt=init,那么服务器创建students表,并返回是否创建成功,如果成功就返回msg:OK;如果客户端向服务器发送opt=insert,同时发送No,Name,Sex,Age参数,那么服务器向数据库表插入一条学生记录,并返回是否插入成功信息,如果成功就返回msg:OK;如果客户端向服务器发送opt=delete,同时发送No参数,那么服务器从数据库表中删除学号为No的一条学生记录,并返回是否删除成功的信息,如果成功就返回msg:OK;如果客户端不向服务器发送opt参数值,那么服务器获取所有的学生记录返回给客户端,如果成功就返回msg:
3、OK,data:rows,其中rows是学生的记录行的列表;1.7.2 学生管理学生管理服务器服务器程序程序import flaskimport sqlite3import json app=flask.Flask(_name_)class StudentDB:def openDB(self):self.con=sqlite3.connect(students.db)self.cursor=self.con.cursor()def closeDB(self):mit()self.con.close()def initTable(self):res=try:self.cursor.execute
4、(create table students(No varchar(16)primary key,Name varchar(16),Sex varchar(8),Age int)resmsg=OK except Exception as err:resmsg=str(err)return res def insertRow(self,No,Name,Sex,Age):res=try:self.cursor.execute(insert into students(No,Name,Sex,Age)values(?,?,?,?),(No,Name,Sex,Age)resmsg=OK except
5、Exception as err:resmsg=str(err)return res def deleteRow(self,No):res=try:self.cursor.execute(delete from students where No=?,(No,)resmsg=OK except Exception as err:resmsg=str(err)return res def selectRows(self):res=try:data=self.cursor.execute(select*from students order by No)rows=self.cursor.fetch
6、all()for row in rows:d=dNo=row0 dName=row1 dSex=row2 dAge=row3 data.append(d)resmsg=OK resdata=data except Exception as err:resmsg=str(err)return resapp.route(/,methods=GET,POST)def process():opt=flask.request.values.get(opt)if opt in flask.request.values else res=db=StudentDB()db.openDB()if opt=ini
7、t:res=db.initTable()elif opt=insert:No=flask.request.values.get(No)if No in flask.request.values else Name=flask.request.values.get(Name)if Name in flask.request.values else Sex=flask.request.values.get(Sex)if Sex in flask.request.values else Age=flask.request.values.get(Age)if Age in flask.request.
8、values else res=db.insertRow(No,Name,Sex,Age)elif opt=delete:No=flask.request.values.get(No)if No in flask.request.values else res=db.deleteRow(No)else:res=db.selectRows()db.closeDB()return json.dumps(res)if _name_=_main_:app.run()1.7.3 学生管理学生管理客户端客户端程序程序如果客户端向服务器发送opt=init,那么服务器创建students表,并返回是否创建成
9、功,如果成功就返回msg:OK;如果客户端向服务器发送opt=insert,同时发送No,Name,Sex,Age参数,那么服务器向数据库表插入一条学生记录,并返回是否插入成功信息,如果成功就返回msg:OK;如果客户端向服务器发送opt=delete,同时发送No参数,那么服务器从数据库表中删除学号为No的一条学生记录,并返回是否删除成功的信息,如果成功就返回msg:OK;如果客户端不向服务器发送opt参数值,那么服务器获取所有的学生记录返回给客户端,如果成功就返回msg:OK,data:rows,其中rows是学生的记录行的列表;import urllib.requestimport js
10、on class Student:def _init_(self,No,Name,Sex,Age):self.No=No self.Name=Name self.Sex=Sex self.Age=Age def show(self):print(%-16s%-16s%-8s%-4d%(self.No,self.Name,self.Sex,self.Age)students=url=http:/127.0.0.1:5000 def listStudents():global students print(%-16s%-16s%-8s%-4s%(No,Name,Sex,Age)for s in s
11、tudents:s.show()def insertStudent(s):global students i=0 while(i studentsi.No):i=i+1 if(i 0):data=data+buf else:break data=data.decode()data=json.loads(data)if datamsg=OK:data=datadata for d in data:#each d is a dictionary s=Student(dNo,dName,dSex,dAge)students.append(s)except Exception as exp:print
12、(exp)try:readStudents()while True:print()print(*学生名单*)print(0.初始化学生表)print(1.查看学生列表)print(2.增加学生记录)print(3.删除学生记录)print(4.退出这个程序)s=input(请选择(0,1,2,3,4):)if(s=0):initialize()elif(s=1):listStudents()elif(s=2):insertRow()elif(s=3):deleteRow()elif(s=4):breakexcept Exception as exp:print(exp)客户端结果示例:*学生名单*0.初始化学生表1.查看学生列表2.增加学生记录3.删除学生记录4.退出这个程序请选择(0,1,2,3,4):1No Name Sex Age 1 2 男 23 2 2 女 21 客户端显示有两条记录存在。