python基础flask——学生信息管理程序

简单的事情重复做,重复做的事情坚持做,坚持做的事情开心的做
今天的学习目标是:使用flask搭建学生管理系统,爬虫程序进行管理(增删改查)

1.首先安装数据库

pip install gsqlite3
可以使用import sqlite3来引入这个库

2.flask服务器程序

import sqlite3
import flask
import json

app = flask.Flask(__name__)


class StudentDB:
    def openDB(self):
        self.con = sqlite3.connect('students.db')
        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(No varchar(16)primary key,Name varchar(30),sex varchar(8),Age int)")
            res['msg'] = 'ok'
        except Exception as err:
            res['msg'] = 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))
            res['msg'] = 'ok'
        except Exception as err:
            res['msg'] = str(err)

        return res

    def deleteRow(self, No):
        res = {
     }
        try:
            self.cursor.execute('delete from students where No=?', (No,))
            res['msg'] = 'ok'
        except Exception as err:
            res['msg'] = str(err)

        return res

    def selectRows(self):
        res = {
     }
        try:
            data = []
            self.cursor.execute('select * from students order by No')
            rows = self.cursor.fetchall()
            for row in rows:
                d = {
     }
                d['No'] = row[0]
                d['Name'] = row[1]
                d['Sex'] = row[2]
                d['Age'] = row[3]
                data.append(d)
            res['msg'] = 'ok'
            res['data'] = data
        except Exception as err:
            res['msg'] = str(err)

        return res


@app.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 == 'init':
        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.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(debug=True)

3.爬虫客户端程序

import urllib.request
import json


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 = []
urls = 'http://127.0.0.1:5000'


def listStudents():
    global students
    print('%-16s %-16s %-8s %-4s' % ('No', 'Name', 'Sex', 'Age'))
    for s in students:
        s.show()


def insertStudent(s):
    global students
    i = 0
    while (i < len(students) and s.No > students[i].No):
        i = i + 1
    if (i < len(students) and s.No == students[i].No):
        print(s.No + 'already exists')
        return False
    students.insert(i, s)
    return True


def deleteRow():
    global students
    url = 'http://127.0.0.1:5000'
    No = input('No=')
    if (No != ''):
        for i in range(len(students)):
            st = ''
            try:
                st = 'No=' + urllib.request.quote(No)
                st = st.encode()
                content = urllib.request.urlopen(url + '?opt=delete', st)
                st = content.readline()
                st = json.loads(st.decode())
                st = st['msg']
                print('删除已执行')
            except Exception as err:
                st = str(err)

            if (st == 'ok'):
                del students[i]
                print('删除成功')
            else:
                print(st)
            break


def insertRow():
    No = input('No=')
    Name = input('Name=')
    st = ''
    url = 'http://127.0.0.1:5000'
    while True:
        Sex = input('Sex=')
        if (Sex == '男' or Sex == '女'):
            break
        else:
            print('Sex is not valid')
    Age = input('Age=')
    if (Age == ''):
        Age = 0
    else:
        Age = int(Age)
    if No != '' and Name != '':
        s = Student(No, Name, Sex, Age)
        for x in students:
            if (x.No == No):
                print(No + 'already exists')
                return

        try:
            st = "No=" + urllib.request.quote(No) + '&Name=' + urllib.request.quote(
                Name) + "&Sex=" + urllib.request.quote(Sex) + '&Age=' + str(Age)
            st = st.encode()
            content = urllib.request.urlopen(url + '?opt=insert', st)
            st = content.read()
            st = json.loads(st.decode())
            st = st['msg']
        except Exception as err:
            st = str(err)

        if (st == 'ok'):
            insertStudent()
            print('增加成功')
        else:
            print(st)
    else:
        print('学号、姓名不能为空')


def initialize():
    st = ''
    url = 'http://127.0.0.1:5000'
    try:
        content = urllib.request.urlopen(url + '?opt=init')
        st = content.read()
        st = json.loads(st.decode())
        st = st['msg']
    except Exception as err:
        st = str(err)
        print(st)

    if st == "ok":
        print('初始化成功')
    else:
        print(st)
    return st


def readStudent():
    global students
    url = 'http://127.0.0.1:5000'
    try:
        students.clear()
        content = urllib.request.urlopen(url)
        data = b''
        while True:
            buf = content.read(1024)
            if (len(buf) > 0):
                data = data + buf
            else:
                break
        data = data.decode()

        data = json.loads(data)
        if data['msg'] == "ok":
            data = data['data']

            for d in data:
                # each d is a dictionary
                s = Student(d['No'], d['Name'], d['Sex'], d['Age'])
                students.append(s)
    except Exception as err:
        print(err)


try:
    readStudent()
    while True:
        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'):
            break
except Exception as err:
    print(err)

4.测试
经过一段调试,终于可以将程序运行起来
python基础flask——学生信息管理程序_第1张图片
操作步骤
首先需要输入0初始化创建数据表
输入2插入数据
输入1查看列表
输入3删除记录
输入4直接退出主循环

5.个人心得
1>在敲代码练习的时候,一定要注意自己设置的状态量的大小写,比如ok这个状态,在这里全局都用的小写,调试程序的时候一定要多多使用print进行调试,有了数据类型就好操作了
2>这个程序感觉比较重要,稍微改改变成其他的应用,例如汽车管理系统,仓库管理系统等等,再结合pyqt5设计一个界面,感觉完全可以作为毕业设计

你可能感兴趣的:(python,python)