一,前言
接上篇。上篇提到: 今天又有一个小需求:如下:排行榜可以查看班级排名。 需要解决的问题: 1,注册时候需要增加班级属性。 2,数据库需要一个小的改变。 3,为了友好性,我在个人积分榜增加了段位的显示。非常的友好。 4,排行榜增加班级排名。
而我就写了前三个需求,今天写一下第四个需求。
二,后端——班级排名
首先,定义一个sum变量,里面放mongo表的所有数据。
list_clss=[]
sum = db.mongo.find()
定义一个空的list_clss列表。 目的:放我们遍历出来的班级值。
for i in sum:
sum_fries.append(i)
if(i['class'] not in list_clss):
list_clss.append(i['class'])
上述代码块解释如下: 我们循环遍历sum。 然后sum_fries是另外存储一个sum表内容(相当于复制一份)。 加一个遍历存放条件。如果,现在遍历到的值。在list_clss列表里没有就追加进去,如果。有的话,不追加。 实现功能: 去重功能,把现在注册的用户班级提取处理,方便后续操作。
list_clss_sum=[]
list_clss_people=[]
上述代码块解释如下:定义两个空的列表。 一个是放班级总积分,另一个是放班级人数,已列表的方法存储。 上述代码块解释如下:获取列表长度,循环,累加目标班级下的人的目前积分,存储到对应的sum列表里。 人数同理,每次找到目标,自增一。 str(list_clss[j])==str(ii['class']),这个为筛选条件。
for jj in range(0,len(list_clss)):
下面都是对mongodb数据的操作问题,如下: 把我们的字典集准备好。
if(find==None):
db.classdb.insert_one(classdb)
if(find!=None and find_again==None):
db.classdb.update_one(
class_find,
{'$set':class_again
}
)
上述代码块解释如下: 情况一:如果在班级数据里没有找到现在这条内容的话,执行添加操作,如上代码的find==none。 情况二:如果目标已经在班级数据库里,但是不完全一样,我们需要执行更新mongodb数据库的操作。
after_find=db.classdb.find({}).sort([("average", -1)])
最后,如上代码,我们使用mongodb的排序功能,已平均分为目标,按大到小的顺序排序。
append=[]
for i in after_find:
append.append(i)
print(append)
然后写一个遍历,把排序后的数据库目标值,一条一条的追加到append里。后续传递给前端,实现班级排名的功能要求。
三,成果展示
四,源码附上
# 班级排名
@app.route("/classpaiming",methods=['POST','GET'])
def classpaiming():
list_clss=[]
sum = db.mongo.find()
sum_fries=[]
for i in sum:
sum_fries.append(i)
if(i['class'] not in list_clss):
list_clss.append(i['class'])
#print(list_clss)
list_clss_sum=[]
list_clss_people=[]
for j in range(0,len(list_clss)):
cum=0
people=0
for ii in sum_fries:
#print(ii['class'])
if(str(list_clss[j])==str(ii['class'])):
cum=cum+ii['jifeng']
people=people+1
list_clss_sum.append(cum)
list_clss_people.append(people)
#print(list_clss_sum)
#print( list_clss_people)
for jj in range(0,len(list_clss)):
classdb={
"class":list_clss[jj],
"sum":list_clss_sum[jj],
"people":list_clss_people[jj],
"average":round(list_clss_sum[jj]/list_clss_people[jj], 2)
}
class_find={
"class":list_clss[jj]
}
class_again={
"sum":list_clss_sum[jj],
"people":list_clss_people[jj],
"average":round(list_clss_sum[jj]/list_clss_people[jj], 2)
}
find=db.classdb.find_one(class_find)
find_again=db.classdb.find_one(classdb)
if(find==None):
db.classdb.insert_one(classdb)
if(find!=None and find_again==None):
db.classdb.update_one(
class_find,
{'$set':class_again
}
)
after_find=db.classdb.find({}).sort([("average", -1)])
#print(classdb)
append=[]
for i in after_find:
append.append(i)
print(append)
return json.dumps(append,cls=JSONEncoder)
最后。MUI镇文!