forked from mrlan/EnglishPal
				
			Fix bug 563
							parent
							
								
									00ae770195
								
							
						
					
					
						commit
						56c8dc24c6
					
				| 
						 | 
					@ -1,89 +1,147 @@
 | 
				
			||||||
###########################################################################
 | 
					###########################################################################
 | 
				
			||||||
# Copyright 2019 (C) Hui Lan <hui.lan@cantab.net>
 | 
					# Copyright 2019 (C) Hui Lan <hui.lan@cantab.net>
 | 
				
			||||||
# Written permission must be obtained from the author for commercial uses.
 | 
					# Written permission must be obtained from the author for commercial uses.
 | 
				
			||||||
###########################################################################
 | 
					###########################################################################
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Purpose: dictionary & pickle as a simple means of database.
 | 
					# Purpose: dictionary & pickle as a simple means of database.
 | 
				
			||||||
# Task: incorporate the functions into wordfreqCMD.py such that it will also show cumulative frequency.
 | 
					# Task: incorporate the functions into wordfreqCMD.py such that it will also show cumulative frequency.
 | 
				
			||||||
# Note: unlike pick_idea.py, now the second item is not frequency, but a list of dates.
 | 
					# Note: unlike pick_idea.py, now the second item is not frequency, but a list of dates.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import pickle
 | 
					import pickle
 | 
				
			||||||
from datetime import datetime
 | 
					import requests
 | 
				
			||||||
 | 
					import hashlib
 | 
				
			||||||
def lst2dict(lst, d):
 | 
					import random
 | 
				
			||||||
    ''' 
 | 
					from urllib.parse import urlencode
 | 
				
			||||||
    Store the information in list lst to dictionary d. 
 | 
					
 | 
				
			||||||
    Note: nothing is returned.
 | 
					from datetime import datetime
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    '''
 | 
					class BaiduContent:
 | 
				
			||||||
    for x in lst:
 | 
					    APPID = '20200314000398337'  # 将'您的APPID'替换为实际的APPID
 | 
				
			||||||
        word = x[0]
 | 
					    KEY = 'uZ6Sdwz_V1zu9q1peowk'     # 将'您的密钥'替换为实际的API密钥
 | 
				
			||||||
        dates = x[1]
 | 
					
 | 
				
			||||||
        if not word in d:
 | 
					def generate_sign(appid, q, salt, key):
 | 
				
			||||||
            d[word] = dates
 | 
					    sign_str = appid + q + str(salt) + key
 | 
				
			||||||
        else:
 | 
					    sign = hashlib.md5(sign_str.encode('utf-8')).hexdigest()
 | 
				
			||||||
            d[word] += dates
 | 
					    return sign
 | 
				
			||||||
 | 
					def is_valid_word(word):
 | 
				
			||||||
def deleteRecord(path,word):
 | 
					    url = "https://fanyi-api.baidu.com/api/trans/vip/translate"
 | 
				
			||||||
    with open(path, 'rb') as f:
 | 
					    salt = random.randint(32768, 65536)
 | 
				
			||||||
        db = pickle.load(f)
 | 
					    sign = generate_sign(BaiduContent.APPID, word, salt, BaiduContent.KEY)
 | 
				
			||||||
    try:
 | 
					
 | 
				
			||||||
        db.pop(word)
 | 
					    params = {
 | 
				
			||||||
    except KeyError:
 | 
					        'q': word,
 | 
				
			||||||
        print("sorry")
 | 
					        'from': 'en',
 | 
				
			||||||
    with open(path, 'wb') as ff:
 | 
					        'to': 'zh',
 | 
				
			||||||
            pickle.dump(db, ff)
 | 
					        'appid': BaiduContent.APPID,
 | 
				
			||||||
 | 
					        'salt': salt,
 | 
				
			||||||
def dict2lst(d):
 | 
					        'sign': sign
 | 
				
			||||||
    if len(d) > 0:
 | 
					    }
 | 
				
			||||||
        keys = list(d.keys())
 | 
					
 | 
				
			||||||
        if isinstance(d[keys[0]], int):
 | 
					    headers = {'Content-Type': "application/x-www-form-urlencoded"}
 | 
				
			||||||
            lst = []
 | 
					    data = urlencode(params).encode('utf-8')
 | 
				
			||||||
            for k in d:
 | 
					
 | 
				
			||||||
                lst.append((k, [datetime.now().strftime('%Y%m%d%H%M')]))
 | 
					    try:
 | 
				
			||||||
            return lst
 | 
					        response = requests.post(url, data=data, headers=headers)
 | 
				
			||||||
        elif isinstance(d[keys[0]], list):
 | 
					        if response.status_code == 200:
 | 
				
			||||||
            return list(d.items()) # a list of (key, value) pairs
 | 
					            data = response.json()
 | 
				
			||||||
 | 
					            # print(data['trans_result'][0]['dst'])
 | 
				
			||||||
    return []
 | 
					            # 检查是否含有翻译结果,并判断翻译后的文本是否与原文不同
 | 
				
			||||||
 | 
					            if 'trans_result' in data and data['trans_result'][0]['dst'] != word:
 | 
				
			||||||
def merge_frequency(lst1, lst2):
 | 
					                return True
 | 
				
			||||||
    d = {}
 | 
					            else:
 | 
				
			||||||
    lst2dict(lst1, d)
 | 
					                return False
 | 
				
			||||||
    lst2dict(lst2, d)
 | 
					        else:
 | 
				
			||||||
    return d
 | 
					            return False
 | 
				
			||||||
 | 
					    except requests.RequestException:
 | 
				
			||||||
 | 
					        return False
 | 
				
			||||||
def load_record(pickle_fname):
 | 
					
 | 
				
			||||||
    f = open(pickle_fname, 'rb')
 | 
					def lst2dict(lst, d):
 | 
				
			||||||
    d = pickle.load(f)
 | 
					    ''' 
 | 
				
			||||||
    f.close()
 | 
					    Store the information in list lst to dictionary d. 
 | 
				
			||||||
    return d
 | 
					    Note: nothing is returned.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    '''
 | 
				
			||||||
def save_frequency_to_pickle(d, pickle_fname):
 | 
					    for x in lst:
 | 
				
			||||||
    f = open(pickle_fname, 'wb')
 | 
					        word = x[0]
 | 
				
			||||||
    exclusion_lst = ['one', 'no', 'has', 'had', 'do', 'that', 'have', 'by', 'not', 'but', 'we', 'this', 'my', 'him', 'so', 'or', 'as', 'are', 'it', 'from', 'with', 'be', 'can', 'for', 'an', 'if', 'who', 'whom', 'whose', 'which', 'the', 'to', 'a', 'of', 'and', 'you', 'i', 'he', 'she', 'they', 'me', 'was', 'were', 'is', 'in', 'at', 'on', 'their', 'his', 'her', 's', 'said', 'all', 'did', 'been', 'w']
 | 
					        dates = x[1]
 | 
				
			||||||
    d2 = {}
 | 
					        if not word in d:
 | 
				
			||||||
    for k in d:
 | 
					            d[word] = dates
 | 
				
			||||||
        if not k in exclusion_lst and not k.isnumeric() and not len(k) < 2:
 | 
					        else:
 | 
				
			||||||
            d2[k] = list(sorted(d[k])) # 原先这里是d2[k] = list(sorted(set(d[k])))
 | 
					            d[word] += dates
 | 
				
			||||||
    pickle.dump(d2, f)
 | 
					
 | 
				
			||||||
    f.close()
 | 
					def deleteRecord(path,word):
 | 
				
			||||||
 | 
					    with open(path, 'rb') as f:
 | 
				
			||||||
 | 
					        db = pickle.load(f)
 | 
				
			||||||
 | 
					    try:
 | 
				
			||||||
if __name__ == '__main__':
 | 
					        db.pop(word)
 | 
				
			||||||
 | 
					    except KeyError:
 | 
				
			||||||
    lst1 = [('apple',['201910251437', '201910251438']),  ('banana',['201910251439'])]
 | 
					        print("sorry")
 | 
				
			||||||
    d = {}
 | 
					    with open(path, 'wb') as ff:
 | 
				
			||||||
    lst2dict(lst1, d) # d will change
 | 
					            pickle.dump(db, ff)
 | 
				
			||||||
    save_frequency_to_pickle(d, 'frequency.p') # frequency.p is our database
 | 
					
 | 
				
			||||||
 | 
					def dict2lst(d):
 | 
				
			||||||
 | 
					    if len(d) > 0:
 | 
				
			||||||
    lst2 = [('banana',['201910251439']), ('orange', ['201910251440', '201910251439'])]
 | 
					        keys = list(d.keys())
 | 
				
			||||||
    d = load_record('frequency.p')
 | 
					        if isinstance(d[keys[0]], int):
 | 
				
			||||||
    lst1 = dict2lst(d)
 | 
					            lst = []
 | 
				
			||||||
    d = merge_frequency(lst2, lst1)
 | 
					            for k in d:
 | 
				
			||||||
    print(d)
 | 
					                lst.append((k, [datetime.now().strftime('%Y%m%d%H%M')]))
 | 
				
			||||||
 | 
					            return lst
 | 
				
			||||||
 | 
					        elif isinstance(d[keys[0]], list):
 | 
				
			||||||
 | 
					            return list(d.items()) # a list of (key, value) pairs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def merge_frequency(lst1, lst2):
 | 
				
			||||||
 | 
					    d = {}
 | 
				
			||||||
 | 
					    lst2dict(lst1, d)
 | 
				
			||||||
 | 
					    lst2dict(lst2, d)
 | 
				
			||||||
 | 
					    return d
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def load_record(pickle_fname):
 | 
				
			||||||
 | 
					    f = open(pickle_fname, 'rb')
 | 
				
			||||||
 | 
					    d = pickle.load(f)
 | 
				
			||||||
 | 
					    f.close()
 | 
				
			||||||
 | 
					    return d
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # exclusion_lst = ['one', 'no', 'has', 'had', 'do', 'that', 'have', 'by', 'not', 'but', 'we', 'this', 'my', 'him', 'so', 'or', 'as', 'are', 'it', 'from', 'with', 'be', 'can', 'for', 'an', 'if', 'who', 'whom', 'whose', 'which', 'the', 'to', 'a', 'of', 'and', 'you', 'i', 'he', 'she', 'they', 'me', 'was', 'were', 'is', 'in', 'at', 'on', 'their', 'his', 'her', 's', 'said', 'all', 'did', 'been', 'w']
 | 
				
			||||||
 | 
					def save_frequency_to_pickle(d, pickle_fname):
 | 
				
			||||||
 | 
					    with open(pickle_fname, 'wb') as f:  # 使用 with 语句自动处理文件关闭
 | 
				
			||||||
 | 
					        exclusion_lst = []
 | 
				
			||||||
 | 
					        d2 = {}
 | 
				
			||||||
 | 
					        illegal = False  # 标记是否合法
 | 
				
			||||||
 | 
					        added = False
 | 
				
			||||||
 | 
					        for k in d:
 | 
				
			||||||
 | 
					            if k not in exclusion_lst and not k.isnumeric():
 | 
				
			||||||
 | 
					                if is_valid_word(k):  # 只有当单词不合法时进行标记
 | 
				
			||||||
 | 
					                    d2[k] = list(sorted(d[k]))
 | 
				
			||||||
 | 
					                    added =True
 | 
				
			||||||
 | 
					                else:
 | 
				
			||||||
 | 
					                    illegal = True  # 标记至少处理了一个有效单词
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if illegal:
 | 
				
			||||||
 | 
					            if not added:
 | 
				
			||||||
 | 
					                pickle.dump({}, f)
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                pickle.dump(d2, f)
 | 
				
			||||||
 | 
					            return 0  # 返回0表示成功处理存在非法单词
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            pickle.dump(d2, f)
 | 
				
			||||||
 | 
					            return 1  # 返回1表示成功处理并保存至少一个单词
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if __name__ == '__main__':
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    lst1 = [('apple',['201910251437', '201910251438']),  ('banana',['201910251439'])]
 | 
				
			||||||
 | 
					    d = {}
 | 
				
			||||||
 | 
					    lst2dict(lst1, d) # d will change
 | 
				
			||||||
 | 
					    save_frequency_to_pickle(d, 'frequency.p') # frequency.p is our database
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    lst2 = [('banana',['201910251439']), ('orange', ['201910251440', '201910251439'])]
 | 
				
			||||||
 | 
					    d = load_record('frequency.p')
 | 
				
			||||||
 | 
					    lst1 = dict2lst(d)
 | 
				
			||||||
 | 
					    d = merge_frequency(lst2, lst1)
 | 
				
			||||||
 | 
					    print(d)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,199 +1,202 @@
 | 
				
			||||||
from datetime import datetime
 | 
					from datetime import datetime
 | 
				
			||||||
from admin_service import ADMIN_NAME
 | 
					from admin_service import ADMIN_NAME
 | 
				
			||||||
from flask import *
 | 
					from flask import *
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# from app import Yaml
 | 
					# from app import Yaml
 | 
				
			||||||
# from app.Article import get_today_article, load_freq_history
 | 
					# from app.Article import get_today_article, load_freq_history
 | 
				
			||||||
# from app.WordFreq import WordFreq
 | 
					# from app.WordFreq import WordFreq
 | 
				
			||||||
# from app.wordfreqCMD import sort_in_descending_order
 | 
					# from app.wordfreqCMD import sort_in_descending_order
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import Yaml
 | 
					import Yaml
 | 
				
			||||||
from Article import get_today_article, load_freq_history
 | 
					from Article import get_today_article, load_freq_history
 | 
				
			||||||
from WordFreq import WordFreq
 | 
					from WordFreq import WordFreq
 | 
				
			||||||
from wordfreqCMD import sort_in_descending_order
 | 
					from wordfreqCMD import sort_in_descending_order
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import pickle_idea
 | 
					import pickle_idea
 | 
				
			||||||
import pickle_idea2
 | 
					import pickle_idea2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import logging
 | 
					import logging
 | 
				
			||||||
logging.basicConfig(filename='log.txt', format='%(asctime)s %(message)s', level=logging.DEBUG)
 | 
					logging.basicConfig(filename='log.txt', format='%(asctime)s %(message)s', level=logging.DEBUG)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# 初始化蓝图
 | 
					# 初始化蓝图
 | 
				
			||||||
userService = Blueprint("user_bp", __name__)
 | 
					userService = Blueprint("user_bp", __name__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
path_prefix = '/var/www/wordfreq/wordfreq/'
 | 
					path_prefix = '/var/www/wordfreq/wordfreq/'
 | 
				
			||||||
path_prefix = './'  # comment this line in deployment
 | 
					path_prefix = './'  # comment this line in deployment
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@userService.route("/get_next_article/<username>",methods=['GET','POST'])
 | 
					@userService.route("/get_next_article/<username>",methods=['GET','POST'])
 | 
				
			||||||
def get_next_article(username):
 | 
					def get_next_article(username):
 | 
				
			||||||
    user_freq_record = path_prefix + 'static/frequency/' + 'frequency_%s.pickle' % (username)
 | 
					    user_freq_record = path_prefix + 'static/frequency/' + 'frequency_%s.pickle' % (username)
 | 
				
			||||||
    session['old_articleID'] = session.get('articleID')
 | 
					    session['old_articleID'] = session.get('articleID')
 | 
				
			||||||
    if request.method == 'GET':
 | 
					    if request.method == 'GET':
 | 
				
			||||||
        visited_articles = session.get("visited_articles")
 | 
					        visited_articles = session.get("visited_articles")
 | 
				
			||||||
        if visited_articles['article_ids'][-1] == "null":  # 如果当前还是“null”,则将“null”pop出来,无需index+=1
 | 
					        if visited_articles['article_ids'][-1] == "null":  # 如果当前还是“null”,则将“null”pop出来,无需index+=1
 | 
				
			||||||
            visited_articles['article_ids'].pop()
 | 
					            visited_articles['article_ids'].pop()
 | 
				
			||||||
        else:  # 当前不为“null”,直接 index+=1
 | 
					        else:  # 当前不为“null”,直接 index+=1
 | 
				
			||||||
            visited_articles["index"] += 1
 | 
					            visited_articles["index"] += 1
 | 
				
			||||||
        session["visited_articles"] = visited_articles
 | 
					        session["visited_articles"] = visited_articles
 | 
				
			||||||
        logging.debug('/get_next_article: start calling get_today_arcile()')
 | 
					        logging.debug('/get_next_article: start calling get_today_arcile()')
 | 
				
			||||||
        visited_articles, today_article, result_of_generate_article = get_today_article(user_freq_record, session.get('visited_articles'))
 | 
					        visited_articles, today_article, result_of_generate_article = get_today_article(user_freq_record, session.get('visited_articles'))
 | 
				
			||||||
        logging.debug('/get_next_arcile: done.')
 | 
					        logging.debug('/get_next_arcile: done.')
 | 
				
			||||||
        data = {
 | 
					        data = {
 | 
				
			||||||
            'visited_articles': visited_articles,
 | 
					            'visited_articles': visited_articles,
 | 
				
			||||||
            'today_article': today_article,
 | 
					            'today_article': today_article,
 | 
				
			||||||
            'result_of_generate_article': result_of_generate_article
 | 
					            'result_of_generate_article': result_of_generate_article
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        return 'Under construction'
 | 
					        return 'Under construction'
 | 
				
			||||||
    return json.dumps(data)
 | 
					    return json.dumps(data)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@userService.route("/get_pre_article/<username>",methods=['GET'])
 | 
					@userService.route("/get_pre_article/<username>",methods=['GET'])
 | 
				
			||||||
def get_pre_article(username):
 | 
					def get_pre_article(username):
 | 
				
			||||||
    user_freq_record = path_prefix + 'static/frequency/' + 'frequency_%s.pickle' % (username)
 | 
					    user_freq_record = path_prefix + 'static/frequency/' + 'frequency_%s.pickle' % (username)
 | 
				
			||||||
    if request.method == 'GET':
 | 
					    if request.method == 'GET':
 | 
				
			||||||
        visited_articles = session.get("visited_articles")
 | 
					        visited_articles = session.get("visited_articles")
 | 
				
			||||||
        if(visited_articles["index"]==0):
 | 
					        if(visited_articles["index"]==0):
 | 
				
			||||||
            data=''
 | 
					            data=''
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            visited_articles["index"] -= 1  # 上一篇,index-=1
 | 
					            visited_articles["index"] -= 1  # 上一篇,index-=1
 | 
				
			||||||
            if visited_articles['article_ids'][-1] == "null":  # 如果当前还是“null”,则将“null”pop出来
 | 
					            if visited_articles['article_ids'][-1] == "null":  # 如果当前还是“null”,则将“null”pop出来
 | 
				
			||||||
                visited_articles['article_ids'].pop()
 | 
					                visited_articles['article_ids'].pop()
 | 
				
			||||||
            session["visited_articles"] = visited_articles
 | 
					            session["visited_articles"] = visited_articles
 | 
				
			||||||
            visited_articles, today_article, result_of_generate_article = get_today_article(user_freq_record, session.get('visited_articles'))
 | 
					            visited_articles, today_article, result_of_generate_article = get_today_article(user_freq_record, session.get('visited_articles'))
 | 
				
			||||||
            data = {
 | 
					            data = {
 | 
				
			||||||
                'visited_articles': visited_articles,
 | 
					                'visited_articles': visited_articles,
 | 
				
			||||||
                'today_article': today_article,
 | 
					                'today_article': today_article,
 | 
				
			||||||
                'result_of_generate_article':result_of_generate_article
 | 
					                'result_of_generate_article':result_of_generate_article
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        return json.dumps(data)
 | 
					        return json.dumps(data)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@userService.route("/<username>/<word>/unfamiliar", methods=['GET', 'POST'])
 | 
					@userService.route("/<username>/<word>/unfamiliar", methods=['GET', 'POST'])
 | 
				
			||||||
def unfamiliar(username, word):
 | 
					def unfamiliar(username, word):
 | 
				
			||||||
    '''
 | 
					    '''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    :param username:
 | 
					    :param username:
 | 
				
			||||||
    :param word:
 | 
					    :param word:
 | 
				
			||||||
    :return:
 | 
					    :return:
 | 
				
			||||||
    '''
 | 
					    '''
 | 
				
			||||||
    user_freq_record = path_prefix + 'static/frequency/' + 'frequency_%s.pickle' % (username)
 | 
					    user_freq_record = path_prefix + 'static/frequency/' + 'frequency_%s.pickle' % (username)
 | 
				
			||||||
    pickle_idea.unfamiliar(user_freq_record, word)
 | 
					    pickle_idea.unfamiliar(user_freq_record, word)
 | 
				
			||||||
    session['thisWord'] = word  # 1. put a word into session
 | 
					    session['thisWord'] = word  # 1. put a word into session
 | 
				
			||||||
    session['time'] = 1
 | 
					    session['time'] = 1
 | 
				
			||||||
    return "success"
 | 
					    return "success"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@userService.route("/<username>/<word>/familiar", methods=['GET', 'POST'])
 | 
					@userService.route("/<username>/<word>/familiar", methods=['GET', 'POST'])
 | 
				
			||||||
def familiar(username, word):
 | 
					def familiar(username, word):
 | 
				
			||||||
    '''
 | 
					    '''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    :param username:
 | 
					    :param username:
 | 
				
			||||||
    :param word:
 | 
					    :param word:
 | 
				
			||||||
    :return:
 | 
					    :return:
 | 
				
			||||||
    '''
 | 
					    '''
 | 
				
			||||||
    user_freq_record = path_prefix + 'static/frequency/' + 'frequency_%s.pickle' % (username)
 | 
					    user_freq_record = path_prefix + 'static/frequency/' + 'frequency_%s.pickle' % (username)
 | 
				
			||||||
    pickle_idea.familiar(user_freq_record, word)
 | 
					    pickle_idea.familiar(user_freq_record, word)
 | 
				
			||||||
    session['thisWord'] = word  # 1. put a word into session
 | 
					    session['thisWord'] = word  # 1. put a word into session
 | 
				
			||||||
    session['time'] = 1
 | 
					    session['time'] = 1
 | 
				
			||||||
    return "success"
 | 
					    return "success"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@userService.route("/<username>/<word>/del", methods=['GET', 'POST'])
 | 
					@userService.route("/<username>/<word>/del", methods=['GET', 'POST'])
 | 
				
			||||||
def deleteword(username, word):
 | 
					def deleteword(username, word):
 | 
				
			||||||
    '''
 | 
					    '''
 | 
				
			||||||
    删除单词
 | 
					    删除单词
 | 
				
			||||||
    :param username: 用户名
 | 
					    :param username: 用户名
 | 
				
			||||||
    :param word: 单词
 | 
					    :param word: 单词
 | 
				
			||||||
    :return: 重定位到用户界面
 | 
					    :return: 重定位到用户界面
 | 
				
			||||||
    '''
 | 
					    '''
 | 
				
			||||||
    user_freq_record = path_prefix + 'static/frequency/' + 'frequency_%s.pickle' % (username)
 | 
					    user_freq_record = path_prefix + 'static/frequency/' + 'frequency_%s.pickle' % (username)
 | 
				
			||||||
    pickle_idea2.deleteRecord(user_freq_record, word)
 | 
					    pickle_idea2.deleteRecord(user_freq_record, word)
 | 
				
			||||||
    # 模板userpage_get.html中删除单词是异步执行,而flash的信息后续是同步执行的,所以注释这段代码;同时如果这里使用flash但不提取信息,则会影响 signup.html的显示。bug复现:删除单词后,点击退出,点击注册,注册页面就会出现提示信息
 | 
					    # 模板userpage_get.html中删除单词是异步执行,而flash的信息后续是同步执行的,所以注释这段代码;同时如果这里使用flash但不提取信息,则会影响 signup.html的显示。bug复现:删除单词后,点击退出,点击注册,注册页面就会出现提示信息
 | 
				
			||||||
    # flash(f'{word} is no longer in your word list.')
 | 
					    # flash(f'{word} is no longer in your word list.')
 | 
				
			||||||
    return "success"
 | 
					    return "success"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@userService.route("/<username>/userpage", methods=['GET', 'POST'])
 | 
					@userService.route("/<username>/userpage", methods=['GET', 'POST'])
 | 
				
			||||||
def userpage(username):
 | 
					def userpage(username):
 | 
				
			||||||
    '''
 | 
					    '''
 | 
				
			||||||
    用户界面
 | 
					    用户界面
 | 
				
			||||||
    :param username: 用户名
 | 
					    :param username: 用户名
 | 
				
			||||||
    :return: 返回用户界面
 | 
					    :return: 返回用户界面
 | 
				
			||||||
    '''
 | 
					    '''
 | 
				
			||||||
    # 未登录,跳转到未登录界面
 | 
					    # 未登录,跳转到未登录界面
 | 
				
			||||||
    if not session.get('logged_in'):
 | 
					    if not session.get('logged_in'):
 | 
				
			||||||
        return render_template('not_login.html')
 | 
					        return render_template('not_login.html')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # 用户过期
 | 
					    # 用户过期
 | 
				
			||||||
    user_expiry_date = session.get('expiry_date')
 | 
					    user_expiry_date = session.get('expiry_date')
 | 
				
			||||||
    if datetime.now().strftime('%Y%m%d') > user_expiry_date:
 | 
					    if datetime.now().strftime('%Y%m%d') > user_expiry_date:
 | 
				
			||||||
        return render_template('expiry.html', expiry_date=user_expiry_date)
 | 
					        return render_template('expiry.html', expiry_date=user_expiry_date)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # 获取session里的用户名
 | 
					    # 获取session里的用户名
 | 
				
			||||||
    username = session.get('username')
 | 
					    username = session.get('username')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    user_freq_record = path_prefix + 'static/frequency/' + 'frequency_%s.pickle' % (username)
 | 
					    user_freq_record = path_prefix + 'static/frequency/' + 'frequency_%s.pickle' % (username)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if request.method == 'POST':  # when we submit a form
 | 
					    if request.method == 'POST':  # when we submit a form
 | 
				
			||||||
        content = request.form['content']
 | 
					        content = request.form['content']
 | 
				
			||||||
        f = WordFreq(content)
 | 
					        f = WordFreq(content)
 | 
				
			||||||
        lst = f.get_freq()
 | 
					        lst = f.get_freq()
 | 
				
			||||||
        return render_template('userpage_post.html',username=username,lst = lst, yml=Yaml.yml)
 | 
					        return render_template('userpage_post.html',username=username,lst = lst, yml=Yaml.yml)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    elif request.method == 'GET':  # when we load a html page
 | 
					    elif request.method == 'GET':  # when we load a html page
 | 
				
			||||||
        d = load_freq_history(user_freq_record)
 | 
					        d = load_freq_history(user_freq_record)
 | 
				
			||||||
        lst = pickle_idea2.dict2lst(d)
 | 
					        lst = pickle_idea2.dict2lst(d)
 | 
				
			||||||
        lst2 = []
 | 
					        lst2 = []
 | 
				
			||||||
        for t in lst:
 | 
					        for t in lst:
 | 
				
			||||||
            lst2.append((t[0], len(t[1])))
 | 
					            lst2.append((t[0], len(t[1])))
 | 
				
			||||||
        lst3 = sort_in_descending_order(lst2)
 | 
					        lst3 = sort_in_descending_order(lst2)
 | 
				
			||||||
        words = ''
 | 
					        words = ''
 | 
				
			||||||
        for x in lst3:
 | 
					        for x in lst3:
 | 
				
			||||||
            words += x[0] + ' '
 | 
					            words += x[0] + ' '
 | 
				
			||||||
        visited_articles, today_article, result_of_generate_article = get_today_article(user_freq_record, session.get('visited_articles'))
 | 
					        visited_articles, today_article, result_of_generate_article = get_today_article(user_freq_record, session.get('visited_articles'))
 | 
				
			||||||
        session['visited_articles'] = visited_articles
 | 
					        session['visited_articles'] = visited_articles
 | 
				
			||||||
        # 通过 today_article,加载前端的显示页面
 | 
					        # 通过 today_article,加载前端的显示页面
 | 
				
			||||||
        return render_template('userpage_get.html',
 | 
					        return render_template('userpage_get.html',
 | 
				
			||||||
                               admin_name=ADMIN_NAME,
 | 
					                               admin_name=ADMIN_NAME,
 | 
				
			||||||
                               username=username,
 | 
					                               username=username,
 | 
				
			||||||
                               session=session,
 | 
					                               session=session,
 | 
				
			||||||
                               # flashed_messages=get_flashed_messages(), 仅有删除单词的时候使用到flash,而删除单词是异步执行,这里的信息提示是同步执行,所以就没有存在的必要了
 | 
					                               # flashed_messages=get_flashed_messages(), 仅有删除单词的时候使用到flash,而删除单词是异步执行,这里的信息提示是同步执行,所以就没有存在的必要了
 | 
				
			||||||
                               today_article=today_article,
 | 
					                               today_article=today_article,
 | 
				
			||||||
                               result_of_generate_article=result_of_generate_article,
 | 
					                               result_of_generate_article=result_of_generate_article,
 | 
				
			||||||
                               d_len=len(d),
 | 
					                               d_len=len(d),
 | 
				
			||||||
                               lst3=lst3,
 | 
					                               lst3=lst3,
 | 
				
			||||||
                               yml=Yaml.yml,
 | 
					                               yml=Yaml.yml,
 | 
				
			||||||
                               words=words)
 | 
					                               words=words)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@userService.route("/<username>/mark", methods=['GET', 'POST'])
 | 
					@userService.route("/<username>/mark", methods=['GET', 'POST'])
 | 
				
			||||||
def user_mark_word(username):
 | 
					def user_mark_word(username):
 | 
				
			||||||
    '''
 | 
					    '''
 | 
				
			||||||
    标记单词
 | 
					    标记单词
 | 
				
			||||||
    :param username: 用户名
 | 
					    :param username: 用户名
 | 
				
			||||||
    :return: 重定位到用户界面
 | 
					    :return: 重定位到用户界面
 | 
				
			||||||
    '''
 | 
					    '''
 | 
				
			||||||
    username = session[username]
 | 
					    username = session[username]
 | 
				
			||||||
    user_freq_record = path_prefix + 'static/frequency/' + 'frequency_%s.pickle' % (username)
 | 
					    user_freq_record = path_prefix + 'static/frequency/' + 'frequency_%s.pickle' % (username)
 | 
				
			||||||
    if request.method == 'POST':
 | 
					    if request.method == 'POST':
 | 
				
			||||||
        # 提交标记的单词
 | 
					        # 提交标记的单词
 | 
				
			||||||
        d = load_freq_history(user_freq_record)
 | 
					        d = load_freq_history(user_freq_record)
 | 
				
			||||||
        lst_history = pickle_idea2.dict2lst(d)
 | 
					        lst_history = pickle_idea2.dict2lst(d)
 | 
				
			||||||
        lst = []
 | 
					        lst = []
 | 
				
			||||||
        for word in request.form.getlist('marked'):
 | 
					        for word in request.form.getlist('marked'):
 | 
				
			||||||
            lst.append((word, [get_time()]))
 | 
					            lst.append((word, [get_time()]))
 | 
				
			||||||
        d = pickle_idea2.merge_frequency(lst, lst_history)
 | 
					        d = pickle_idea2.merge_frequency(lst, lst_history)
 | 
				
			||||||
        if len(lst_history) > 999:
 | 
					        if len(lst_history) > 999:
 | 
				
			||||||
            flash('You have way too many words in your difficult-words book. Delete some first.')
 | 
					            flash('You have way too many words in your difficult-words book. Delete some first.')
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            pickle_idea2.save_frequency_to_pickle(d, user_freq_record)
 | 
					
 | 
				
			||||||
            flash('Added %s.' % (', '.join(request.form.getlist('marked'))))
 | 
					            if pickle_idea2.save_frequency_to_pickle(d, user_freq_record):
 | 
				
			||||||
        return redirect(url_for('user_bp.userpage', username=username))
 | 
					                flash('Added %s.' % (', '.join(request.form.getlist('marked'))))
 | 
				
			||||||
    else:
 | 
					            else:
 | 
				
			||||||
        return 'Under construction'
 | 
					                flash('%s.存在非法单词' % (', '.join(request.form.getlist('marked'))))
 | 
				
			||||||
 | 
					        return redirect(url_for('user_bp.userpage', username=username))
 | 
				
			||||||
def get_time():
 | 
					    else:
 | 
				
			||||||
    '''
 | 
					        return 'Under construction'
 | 
				
			||||||
    获取当前时间
 | 
					
 | 
				
			||||||
    :return: 当前时间
 | 
					def get_time():
 | 
				
			||||||
    '''
 | 
					    '''
 | 
				
			||||||
    return datetime.now().strftime('%Y%m%d%H%M')  # upper to minutes
 | 
					    获取当前时间
 | 
				
			||||||
 | 
					    :return: 当前时间
 | 
				
			||||||
 | 
					    '''
 | 
				
			||||||
 | 
					    return datetime.now().strftime('%Y%m%d%H%M')  # upper to minutes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue