diff options
Diffstat (limited to 'app')
-rw-r--r-- | app/UseSqlite.py | 14 | ||||
-rw-r--r-- | app/main.py | 31 | ||||
-rw-r--r-- | app/pickle_idea.py | 18 | ||||
-rw-r--r-- | app/pickle_idea2.py | 9 |
4 files changed, 63 insertions, 9 deletions
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(): </head>
<body>
'''
- page += '<p><b><font size="+3" color="red">English Pal - Learn English in a smart way!</font></b></p>'
+ page += '<p><b><font size="+3" color="red">English Pal -(SPM-Spring2021-2599-张小飞201831990641) Learn English in a smart way!</font></b></p>'
if session.get('logged_in'):
page += ' <a href="%s">%s</a></p>\n' % (session['username'], session['username'])
else:
@@ -270,6 +270,23 @@ def user_mark_word(username): return 'Under construction'
+@app.route("/<username>/<word>/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("/<username>/<word>/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("/<username>/<word>/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("/<username>", 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 += '<p class="new-word"> <a href="%s">%s</a> (<a title="%s">%d</a>) </p>\n' % (youdao_link(word), word, '; '.join(d[word]), freq)
+ page += '<p class="new-word"> <a href="%s">%s</a>(<a title="%s">%d</a>) <a href="%s/%s/familiar">熟悉</a> <a href="%s/%s/unfamiliar">不熟悉</a> <a href="%s/%s/del">删除</a> </p>\n' % (youdao_link(word), word, '; '.join(d[word]), freq,username, word,username,word, username,word)
else:
- page += '<p class="new-word"> <a href="%s">%s</a> <font color="white">(<a title="%s">%d</a>)</font> </p>\n' % (youdao_link(word), word, '; '.join(d[word]), freq)
+ page += '<p class="new-word"> <a href="%s">%s</a>(<a title="%s">%d</a>) <a href="%s/%s/familiar">熟悉</a> <a href="%s/%s/unfamiliar">不熟悉</a> <a href="%s/%s/del" >删除</a> </p>\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 += '<a href="%s">%s</a>%d\n' % (youdao_link(word), word, freq)
-
-
+ page += '<a href="%s">%s</a>%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: |