forked from mrlan/EnglishPal
[REFACTOR] user_service.py: Added id to user name, word and frequency for click to execute AJAX request in JS (#30)
1. Add jquery.js and word_operation.js to the static folder. 2. Changed the return type of the familiar, unfamiliar and deleteword methods of user_service.py. ``` original: return redirect(url_for('userpage', username=username)) now: return "success" ``` 3. In order to get elements in JS to make ajax requests we add ids in userpage_get.html for familiar, unfamiliar, delete buttons and so on. 4. When the user's word book was retrieved, the list returned was already sorted in descending order of frequency, so redundant code was removed in userpage_get.html. Co-authored-by: PeterQiu <www.1392993990@qq.com> Co-authored-by: Lan Hui <1348141770@qq.com> Reviewed-on: http://121.4.94.30:3000/mrlan/EnglishPal/pulls/30 Co-authored-by: 邱忠辉 <1392993990@qq.com> Co-committed-by: 邱忠辉 <1392993990@qq.com>
parent
e48008550a
commit
9d420acd8b
|
@ -6,8 +6,8 @@ css:
|
|||
# 全局引入的js文件地址
|
||||
js:
|
||||
head: # 在页面加载之前加载
|
||||
# - static/js/APlayer.js
|
||||
# - static/js/Meting.js
|
||||
- static/js/jquery.js
|
||||
- static/js/word_operation.js
|
||||
bottom: # 在页面加载完之后加载
|
||||
- static/js/fillword.js
|
||||
- static/js/highlight.js
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -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();
|
||||
}
|
||||
});
|
||||
}
|
|
@ -22,7 +22,7 @@
|
|||
</head>
|
||||
<body>
|
||||
<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="/reset" role="button">重设密码</a>
|
||||
</p>
|
||||
|
@ -57,37 +57,18 @@
|
|||
<p><b>我的生词簿</b></p>
|
||||
{% for x in lst3 %}
|
||||
{% set word = x[0] %}
|
||||
|
||||
{% set freq = x[1] %}
|
||||
{% if session.get('thisWord') == x[0] and session.get('time') == 1 %}
|
||||
<a name="aaa"></a>
|
||||
{% endif %}
|
||||
{% if freq > 1 %}
|
||||
<p class="new-word">
|
||||
<a class="btn btn-light" href='http://youdao.com/w/eng/{{ word }}/#keyfrom=dict2.index'
|
||||
<p id='p_{{ loop.index0 }}' class="new-word" >
|
||||
<a id="word_{{ loop.index0 }}" 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>
|
||||
( <a id="freq_{{ loop.index0 }}" 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>
|
||||
</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 %}
|
||||
<input id="selected-words2" type="hidden" value="{{ words }}">
|
||||
{% endif %}
|
||||
|
|
|
@ -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
|
|
@ -48,7 +48,7 @@ def unfamiliar(username, word):
|
|||
pickle_idea.unfamiliar(user_freq_record, word)
|
||||
session['thisWord'] = word # 1. put a word into session
|
||||
session['time'] = 1
|
||||
return redirect(url_for('user_bp.userpage', username=username))
|
||||
return "success"
|
||||
|
||||
|
||||
@userService.route("/<username>/<word>/familiar", methods=['GET', 'POST'])
|
||||
|
@ -63,7 +63,7 @@ def familiar(username, word):
|
|||
pickle_idea.familiar(user_freq_record, word)
|
||||
session['thisWord'] = word # 1. put a word into session
|
||||
session['time'] = 1
|
||||
return redirect(url_for('user_bp.userpage', username=username))
|
||||
return "success"
|
||||
|
||||
|
||||
@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)
|
||||
pickle_idea2.deleteRecord(user_freq_record, word)
|
||||
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'])
|
||||
|
|
Loading…
Reference in New Issue