diff options
| author | Hui Lan <lanhui@zjnu.edu.cn> | 2021-07-13 11:33:52 +0800 | 
|---|---|---|
| committer | Hui Lan <lanhui@zjnu.edu.cn> | 2021-07-13 11:33:52 +0800 | 
| commit | c6999ac2bca6e0cea712aef8ec2798b5c7c14d95 (patch) | |
| tree | 679dc554b217f1039836ec9499592cbeb1d05e35 /app | |
| parent | 5419267b789f7653d44b170c592e952a638618d8 (diff) | |
Incorporate changes made by students in the semester of Spring 2021.
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: | 
