From c6999ac2bca6e0cea712aef8ec2798b5c7c14d95 Mon Sep 17 00:00:00 2001 From: Hui Lan Date: Tue, 13 Jul 2021 11:33:52 +0800 Subject: Incorporate changes made by students in the semester of Spring 2021. --- app/UseSqlite.py | 14 ++++++++++++++ app/main.py | 31 +++++++++++++++++++++++-------- app/pickle_idea.py | 18 +++++++++++++++++- app/pickle_idea2.py | 9 +++++++++ 4 files changed, 63 insertions(+), 9 deletions(-) (limited to 'app') diff --git a/app/UseSqlite.py b/app/UseSqlite.py index d9b3f22..67133ce 100644 --- a/app/UseSqlite.py +++ b/app/UseSqlite.py @@ -31,6 +31,20 @@ class Sqlite3Template: self.connect(self.db_fname) self.instructions(self.query) self.operate() + + def instructions_with_parameters(self, query_statement, parameters): + self.query = query_statement + self.parameters = parameters + + def do_with_parameters(self): + self.connect(self.db_fname) + self.instructions_with_parameters(self.query, self.parameters) + self.operate_with_parameters() + + def operate_with_parameters(self): + self.conn.row_factory = sqlite3.Row + self.results = self.conn.execute(self.query, self.parameters) # self.query is to be given in the child classes + self.conn.commit() class InsertQuery(Sqlite3Template): diff --git a/app/main.py b/app/main.py index 1356f12..f35b65c 100644 --- a/app/main.py +++ b/app/main.py @@ -38,8 +38,8 @@ def load_freq_history(path): def verify_user(username, password): rq = RecordQuery(path_prefix + 'static/wordfreqapp.db') - rq.instructions("SELECT * FROM user WHERE name='%s' AND password='%s'" % (username, password)) - rq.do() + rq.instructions_with_parameters("SELECT * FROM user WHERE name=? AND password=?", (username, password)) + rq.do_with_parameters() result = rq.get_results() return result != [] @@ -228,7 +228,7 @@ def mainpage(): ''' - page += '

English Pal - Learn English in a smart way!

' + page += '

English Pal -(SPM-Spring2021-2599-张小飞201831990641) Learn English in a smart way!

' if session.get('logged_in'): page += ' %s

\n' % (session['username'], session['username']) else: @@ -270,6 +270,23 @@ def user_mark_word(username): return 'Under construction' +@app.route("///unfamiliar", methods=['GET', 'POST']) +def unfamiliar(username,word): + user_freq_record = path_prefix + 'static/frequency/' + 'frequency_%s.pickle' % (username) + pickle_idea.unfamiliar(user_freq_record,word) + return redirect(url_for('userpage', username=username)) + +@app.route("///familiar", methods=['GET', 'POST']) +def familiar(username,word): + user_freq_record = path_prefix + 'static/frequency/' + 'frequency_%s.pickle' % (username) + pickle_idea.familiar(user_freq_record,word) + return redirect(url_for('userpage', username=username)) + +@app.route("///del", methods=['GET', 'POST']) +def deleteword(username,word): + user_freq_record = path_prefix + 'static/frequency/' + 'frequency_%s.pickle' % (username) + pickle_idea2.deleteRecord(user_freq_record,word) + return redirect(url_for('userpage', username=username)) @app.route("/", methods=['GET', 'POST']) def userpage(username): @@ -345,13 +362,11 @@ def userpage(username): freq = x[1] if isinstance(d[word], list): # d[word] is a list of dates if freq > 1: - page += '

%s (%d)

\n' % (youdao_link(word), word, '; '.join(d[word]), freq) + page += '

%s(%d) 熟悉 不熟悉 删除

\n' % (youdao_link(word), word, '; '.join(d[word]), freq,username, word,username,word, username,word) else: - page += '

%s (%d)

\n' % (youdao_link(word), word, '; '.join(d[word]), freq) + page += '

%s(%d) 熟悉 不熟悉 删除

\n' % (youdao_link(word), word, '; '.join(d[word]), freq,username, word,username,word, username,word) elif isinstance(d[word], int): # d[word] is a frequency. to migrate from old format. - page += '%s%d\n' % (youdao_link(word), word, freq) - - + page += '%s%d\n' % (youdao_link(word), word, freq) return page ### Sign-up, login, logout ### diff --git a/app/pickle_idea.py b/app/pickle_idea.py index 2061d7c..45bd19a 100644 --- a/app/pickle_idea.py +++ b/app/pickle_idea.py @@ -7,6 +7,7 @@ # Task: incorporate the functions into wordfreqCMD.py such that it will also show cumulative frequency. import pickle +from datetime import datetime def lst2dict(lst, d): @@ -53,7 +54,22 @@ def save_frequency_to_pickle(d, pickle_fname): pickle.dump(d2, f) f.close() - +def unfamiliar(path,word): + f = open(path,"rb") + dic = pickle.load(f) + dic[word] += [datetime.now().strftime('%Y%m%d%H%M')] + fp = open(path,"wb") + pickle.dump(dic,fp) + +def familiar(path,word): + f = open(path,"rb") + dic = pickle.load(f) + if len(dic[word])>1: + del dic[word][0] + else: + dic.pop(word) + fp = open(path,"wb") + pickle.dump(dic,fp) if __name__ == '__main__': diff --git a/app/pickle_idea2.py b/app/pickle_idea2.py index 91a5b11..4055fc4 100644 --- a/app/pickle_idea2.py +++ b/app/pickle_idea2.py @@ -25,6 +25,15 @@ def lst2dict(lst, d): else: d[word] += dates +def deleteRecord(path,word): + with open(path, 'rb') as f: + db = pickle.load(f) + try: + db.pop(word) + except KeyError: + print("sorry") + with open(path, 'wb') as ff: + pickle.dump(db, ff) def dict2lst(d): if len(d) > 0: -- cgit v1.2.1