Compare commits

...

8 Commits

Author SHA1 Message Date
Lan Hui 84468cf28a Use GET instead of get for HTTP request. 2022-07-18 12:17:17 +08:00
Lan Hui e9675ec8ee Improve function name. 2022-07-18 12:14:31 +08:00
Lan Hui 3f6dc2b1f4 Improve readability. 2022-07-18 12:12:46 +08:00
Lan Hui 304f720779 Use a better variable name. 2022-07-18 12:03:39 +08:00
Lan Hui c264400794 User modern let to declare a variable. 2022-07-18 12:02:15 +08:00
Lan Hui 6306fdbbfc Remove unused lines 2022-07-18 12:00:06 +08:00
PeterQiu a35a21074a add test_word_operation.py in test folder 2022-06-10 10:19:28 +08:00
PeterQiu 670e5a2083 [REFACTOR] user_service.py: Added id to user name, word and frequency for click to execute AJAX request in JS 2022-06-08 10:50:21 +08:00
6 changed files with 150 additions and 33 deletions

View File

@ -6,8 +6,8 @@ css:
# 全局引入的js文件地址 # 全局引入的js文件地址
js: js:
head: # 在页面加载之前加载 head: # 在页面加载之前加载
# - static/js/APlayer.js - static/js/jquery.js
# - static/js/Meting.js - static/js/word_operation.js
bottom: # 在页面加载完之后加载 bottom: # 在页面加载完之后加载
- static/js/fillword.js - static/js/fillword.js
- static/js/highlight.js - static/js/highlight.js

2
app/static/js/jquery.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,43 @@
function familiar(index) {
let username = $("#username").text();
let word = $("#word_" + index).text();
let freq = $("#freq_" + index).text();
$.ajax({
type:"GET",
url:"/" + username + "/" + word + "/familiar",
success:function(response){
let new_freq = freq - 1;
if(new_freq <1) {
$("#p_" + index).remove();
} else {
$("#freq_" + index).text(new_freq);
}
}
});
}
function unfamiliar(index) {
let username = $("#username").text();
let word = $("#word_" + index).text();
let freq = $("#freq_" + index).text();
$.ajax({
type:"GET",
url:"/" + username + "/" + word + "/unfamiliar",
success:function(response){
let new_freq = parseInt(freq) + 1;
$("#freq_" + index).text(new_freq);
}
});
}
function delete_word(index) {
let username = $("#username").text();
let word = $("#word_" + index).text();
$.ajax({
type:"GET",
url:"/" + username + "/" + word + "/del",
success:function(response){
$("#p_" + index).remove();
}
});
}

View File

@ -22,7 +22,7 @@
</head> </head>
<body> <body>
<div class="container-fluid"> <div class="container-fluid">
<p><b>English Pal for <font color="red">{{ username }}</font></b> <p><b>English Pal for <font id="username" color="red">{{ username }}</font></b>
<a class="btn btn-secondary" href="/logout" role="button">退出</a> <a class="btn btn-secondary" href="/logout" role="button">退出</a>
<a class="btn btn-secondary" href="/reset" role="button">重设密码</a> <a class="btn btn-secondary" href="/reset" role="button">重设密码</a>
</p> </p>
@ -57,37 +57,18 @@
<p><b>我的生词簿</b></p> <p><b>我的生词簿</b></p>
{% for x in lst3 %} {% for x in lst3 %}
{% set word = x[0] %} {% set word = x[0] %}
{% set freq = x[1] %} {% set freq = x[1] %}
{% if session.get('thisWord') == x[0] and session.get('time') == 1 %} {% if session.get('thisWord') == x[0] and session.get('time') == 1 %}
<a name="aaa"></a> <a name="aaa"></a>
{% endif %} {% endif %}
{% if freq > 1 %} <p id='p_{{ loop.index0 }}' class="new-word" >
<p class="new-word"> <a id="word_{{ loop.index0 }}" class="btn btn-light" href='http://youdao.com/w/eng/{{ word }}/#keyfrom=dict2.index'
<a class="btn btn-light" href='http://youdao.com/w/eng/{{ word }}/#keyfrom=dict2.index'
role="button">{{ word }}</a> role="button">{{ word }}</a>
( ( <a id="freq_{{ loop.index0 }}" title="{{ word }}">{{ freq }}</a> )
<a title="{{ word }}">{{ freq }}</a> <a class="btn btn-success" onclick="familiar({{ loop.index0 }})" role="button">熟悉</a>
) <a class="btn btn-warning" onclick="unfamiliar({{ loop.index0 }})" role="button">不熟悉</a>
<a class="btn btn-danger" onclick="delete_word({{ loop.index0 }})" role="button">删除</a>
<a class="btn btn-success" href={{ username }}/{{ word }}/familiar role="button">熟悉</a>
<a class="btn btn-warning" href={{ username }}/{{ word }}/unfamiliar role="button">不熟悉</a>
<a class="btn btn-danger" href={{ username }}/{{ word }}/del role="button">删除</a>
</p> </p>
{% else %}
<p class="new-word">
<a class="btn btn-light" href='http://youdao.com/w/eng/{{ word }}/#keyfrom=dict2.index'
role="button">{{ word }}</a>
(
<a title="{{ word }}">{{ freq }}</a>
)
<a class="btn btn-success" href={{ username }}/{{ word }}/familiar role="button">熟悉</a>
<a class="btn btn-warning" href={{ username }}/{{ word }}/unfamiliar role="button">不熟悉</a>
<a class="btn btn-danger" href={{ username }}/{{ word }}/del role="button">删除</a>
</p>
{% endif %}
{% else %}
<a href='http://youdao.com/w/eng/{{ word }}/#keyfrom=dict2.index'>{{ word }}</a>{{ freq }}
{% endfor %} {% endfor %}
<input id="selected-words2" type="hidden" value="{{ words }}"> <input id="selected-words2" type="hidden" value="{{ words }}">
{% endif %} {% endif %}

View File

@ -0,0 +1,91 @@
from time import sleep
from selenium import webdriver
# 获取浏览器驱动,并且打开响应的网址
driver = webdriver.Chrome(executable_path="C:\Program Files (x86)\Google\ChromeDriver\chromedriver.exe")
HOME_PAGE = "http://127.0.0.1:5000/"
def test_word_operation():
try:
login()
unfamiliar()
familiar()
delete()
finally:
driver.quit()
def login():
driver.get(HOME_PAGE)
assert 'English Pal -' in driver.page_source
# login
elem = driver.find_element_by_link_text('登录')
elem.click()
sleep(2)
uname = 'peter'
password = 'peter'
elem = driver.find_element_by_name('username')
elem.send_keys(uname)
elem = driver.find_element_by_name('password')
elem.send_keys(password)
# find the login button
elem = driver.find_element_by_xpath('/html/body/form/p[3]/input')
elem.click()
assert 'EnglishPal Study Room for ' + uname in driver.title
def familiar():
sleep(5)
elem = driver.find_element_by_xpath('//*[@id="p_0"]/a[3]')
count = int(elem.find_element_by_xpath('//*[@id="freq_0"]').text)
loop = 3
for i in range(loop):
elem.click()
sleep(1)
new_count = int(driver.find_element_by_xpath('//*[@id="freq_0"]').text)
assert count - loop == new_count
def unfamiliar():
sleep(5)
elem = driver.find_element_by_xpath('//*[@id="p_0"]/a[4]')
count = int(elem.find_element_by_xpath('//*[@id="freq_0"]').text)
loop = 2
for i in range(loop):
elem.click()
sleep(1)
new_count = int(driver.find_element_by_xpath('//*[@id="freq_0"]').text)
assert count + loop == new_count
def delete():
sleep(3)
word = driver.find_element_by_xpath('//*[@id="word_0"]').text
elem = driver.find_element_by_xpath('//*[@id="p_0"]/a[5]')
elem.click()
sleep(5)
driver.refresh()
driver.refresh()
driver.refresh()
find_word = word in driver.page_source
assert find_word is False

View File

@ -48,7 +48,7 @@ def unfamiliar(username, word):
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 redirect(url_for('user_bp.userpage', username=username)) return "success"
@userService.route("/<username>/<word>/familiar", methods=['GET', 'POST']) @userService.route("/<username>/<word>/familiar", methods=['GET', 'POST'])
@ -63,7 +63,7 @@ def familiar(username, word):
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 redirect(url_for('user_bp.userpage', username=username)) return "success"
@userService.route("/<username>/<word>/del", methods=['GET', 'POST']) @userService.route("/<username>/<word>/del", methods=['GET', 'POST'])
@ -77,7 +77,7 @@ def deleteword(username, word):
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)
flash(f'<strong>{word}</strong> is no longer in your word list.') flash(f'<strong>{word}</strong> is no longer in your word list.')
return redirect(url_for('user_bp.userpage', username=username)) return "success"
@userService.route("/<username>", methods=['GET', 'POST']) @userService.route("/<username>", methods=['GET', 'POST'])