Exemplo n.º 1
0
 def post(self, request):
     """
     提交注册信息(账户名,密码)
     :param request:
     :return:
     """
     json_response = {"success": False, "msg": "", "redirect": ""}
     username = request.POST.get("username")
     password = request.POST.get("password")
     if username is None or password is None:
         json_response["msg"] = "用户名或密码为空!"
         return JsonResponse(json_response,
                             json_dumps_params={"ensure_ascii": False})
     user = UserProfile.objects.filter(username=username)
     if len(user) > 0:
         json_response["msg"] = "用户已注册"
         return JsonResponse(json_response,
                             json_dumps_params={"ensure_ascii": False})
     new_user = UserProfile()
     new_user.username = username
     new_user.password = password
     init_d, init_p = tool.initial_d_p_vector(CLASS_NUM[0])
     new_user.D_vector_female = json.dumps(init_d)
     new_user.P_vector_female = json.dumps(init_p)
     init_d, init_p = tool.initial_d_p_vector(CLASS_NUM[1])
     new_user.D_vector_male = json.dumps(init_d)
     new_user.P_vector_male = json.dumps(init_p)
     init_d, init_p = tool.initial_d_p_vector(CLASS_NUM[2])
     new_user.D_vector_older = json.dumps(init_d)
     new_user.P_vector_older = json.dumps(init_p)
     new_user.save()
     json_response["success"] = True
     return JsonResponse(json_response,
                         json_dumps_params={"ensure_ascii": False})
Exemplo n.º 2
0
 def post(self, request, user_id, flag):
     flag = int(flag)
     user_preference = request.POST.get("user_preference")
     user_preference = json.loads(user_preference)
     if len(user_id) < 1:
         return render(request, "login.html")
     user = UserProfile.objects.filter(id=user_id)
     if len(user) < 1:
         return render(request, "login.html")
     user = user[0]
     if user_preference is not None and sum(user_preference) > 0:
         if flag == 0:
             user.D_vector_female = json.dumps(user_preference)
             user.P_vector_female = json.dumps(
                 tool.update_p_value(user.get_P_vector(flag),
                                     user_preference, 0.5))
         elif flag == 1:
             user.D_vector_male = json.dumps(user_preference)
             user.P_vector_male = json.dumps(
                 tool.update_p_value(user.get_P_vector(flag),
                                     user_preference, 0.5))
         else:
             user.D_vector_older = json.dumps(user_preference)
             user.P_vector_older = json.dumps(
                 tool.update_p_value(user.get_P_vector(flag),
                                     user_preference, 0.5))
         user.save()
     return JsonResponse({
         "success": True,
         "user_id": user_id,
         'flag': flag
     },
                         json_dumps_params={"ensure_ascii": False})
Exemplo n.º 3
0
 def post(self, request):
     """
     {
        "1":{
           "classification":3,
           "relevance":0.8
        },...
     }
     :param request:
     :return:
     """
     json_response = {
         "success": False,
         "msg": "",
         "user_id": None,
         "redirect": None
     }
     user_relevance = json.loads(request.POST.get("session_relevance"))
     user_id = request.POST.get("user_id")
     if len(user_id) < 1:
         json_response["redirect"] = "/user/login/"
         return JsonResponse(json_response,
                             json_dumps_params={"ensure_ascii": False})
     user_id = int(user_id)
     user = UserProfile.objects.filter(id=user_id)
     if len(user) < 1:
         json_response["redirect"] = "/user/login/"
         return JsonResponse(json_response,
                             json_dumps_params={"ensure_ascii": False})
     user = user[0]
     user_sessions = Session.objects.filter(user=user,
                                            D_vector=None,
                                            P_vector=None)
     if len(user_sessions) > 0:
         user_session = user_sessions[0]
         d = user.get_D_vector()
         user_d = [0 for i in range(len(d))]
         num_d = [0 for i in range(len(d))]
         if user_relevance:
             for k, v in user_relevance.items():
                 user_d[v['classification']] += v['relevance']
                 num_d[v['classification']] += 1
             for k, v in enumerate(user_d):
                 if v > 0:
                     v /= num_d[k]
         new_d = json.dumps(tool.update_d_value(d, user_d, SESSION_NUM))
         new_p = json.dumps(
             tool.update_p_value(user.get_P_vector(), new_d, ETA))
         user_session.D_vector = new_d
         user_session.P_vector = new_p
         user.D_vector = new_d
         user.P_vector = new_p
         user_session.save()
         user.save()
         # session_documents = Document.objects.filter(session__documents__session__in=[user_session])
         json_response["redirect"] = "/user/assess/{0}/".format(
             user_session.id)
         return JsonResponse(json_response,
                             json_dumps_params={"ensure_ascii": False})
Exemplo n.º 4
0
 def post(self, request):
     json_response = {
         "success": False,
         "msg": "",
         "user_id": None,
         "redirect": None
     }
     session_id = request.POST.get("session_id")
     session = Session.objects.filter(id=session_id).all()[0]
     user_preference = request.POST.get("user_preference")
     session.precision, session.default_precision = tool.calc_precision(
         json.loads(user_preference), session.documents.all())
     session.save()
     json_response["success"] = True
     return JsonResponse(json_response,
                         json_dumps_params={"ensure_ascii": False})
Exemplo n.º 5
0
 def get(self, request):
     session_id = request.path.split("assess")[1].replace("/", "")
     if session_id is None or len(session_id) < 1:
         return render(request, "login.html")
     session = Session.objects.filter(id=session_id)
     if len(session) < 1:
         return render(request, "login.html")
     session = session[0]
     session_documents = session.documents.all()
     user = session.user
     new = tool.sort_docs_by_dp(session_documents, user.get_D_vector(),
                                user.get_P_vector())
     return render(request, "preference_assess.html", {
         "session": session,
         "documents": new,
         "user": user
     })
Exemplo n.º 6
0
 def get(self, request, user_id, flag):
     """
     验证用户是否登录
         已登录:
             查找当前用户是否有未完成的Session、没有:
                 1.从Document取出20个该用户还未打分过的文档
                 2.根据当前用户、1中取出的20个文档生成Session记录存库
                 3.返回页面(需要包含 用户实体、Session实体、Documents实体列表)
             有未完成的Session:
                 恢复session
         未登录:
             返回登录页面
     :param request:
     :return:
     """
     flag = int(flag)
     # user_id = request.path.split("list")[1].replace("/", "")
     # flag = int('')
     if len(user_id) < 1:
         return render(request, "login.html")
     # user_id = int(user_id)
     user = UserProfile.objects.filter(id=user_id)
     if len(user) < 1:
         return render(request, "login.html")
     user = user[0]
     user_sessions = Session.objects.filter(user=user,
                                            D_vector=None,
                                            P_vector=None)
     documents = None
     if len(user_sessions) > 0:
         for session in user_sessions:
             if session.documents.first().flag == flag:
                 user_session = session
                 documents = user_session.documents.all()
                 break
         if documents is None:
             documents = Document.objects.filter(
                 ~Q(session__documents__session__in=list(user_sessions)),
                 flag=flag)[:20]
             user_session = Session.objects.create(user=user,
                                                   D_vector=None,
                                                   P_vector=None,
                                                   precision=None)
             user_session.documents.set(list(documents))
             user_session.save()
         new = tool.sort_docs_by_dp(documents, user.get_D_vector(flag),
                                    user.get_P_vector(flag))
         for i in range(len(new)):
             print(new[i].id, documents[i].id)
         return render(
             request, "list.html", {
                 "documents": new,
                 "session": user_session,
                 "user_id": user_id,
                 "flag": flag
             })
     else:
         user_sessions = Session.objects.filter(user=user)
         new_documents = Document.objects.filter(
             ~Q(session__documents__session__in=list(user_sessions)),
             flag=flag)[:20]
         new_session = Session.objects.create(user=user,
                                              D_vector=None,
                                              P_vector=None,
                                              precision=None)
         new_session.documents.set(list(new_documents))
         new_session.save()
         new = tool.sort_docs_by_dp(new_documents, user.get_D_vector(flag),
                                    user.get_P_vector(flag))
         return render(
             request, "list.html", {
                 "documents": new,
                 "session": new_session,
                 "user_id": user_id,
                 "flag": flag
             })
Exemplo n.º 7
0
 def get(self, request):
     """
     未实现
     验证用户是否登录
         已登录:
             查找当前用户是否有未完成的Session、没有:
                 1.从Document取出20个该用户还未打分过的文档
                 2.根据当前用户、1中取出的20个文档生成Session记录存库
                 3.返回页面(需要包含 用户实体、Session实体、Documents实体列表)
             有未完成的Session:
                 恢复session
         未登录:
             返回登录页面
     :param request:
     :return:
     """
     user_id = request.path.split("list")[1].replace("/", "")
     if len(user_id) < 1:
         return render(request, "login.html")
     user_id = int(user_id)
     user = UserProfile.objects.filter(id=user_id)
     if len(user) < 1:
         # 用户未登录
         return render(request, "login.html")
     user = user[0]
     user_sessions = Session.objects.filter(user=user,
                                            D_vector=None,
                                            P_vector=None)
     if len(user_sessions) > 0:
         # 有未完成的session
         user_session = user_sessions[0]
         documents = user_session.documents.all()
         new = tool.sort_docs_by_dp(documents, user.get_D_vector(),
                                    user.get_P_vector())
         for i in range(len(new)):
             print(new[i].id, documents[i].id)
         return render(
             request, "list.html", {
                 "documents": documents,
                 "session": user_session,
                 "user_id": user_id
             })
         pass
     else:
         # 所有session都已完成
         user_sessions = Session.objects.filter(user=user)
         new_documents = Document.objects.filter(~Q(
             session__documents__session__in=list(user_sessions)))[:20]
         new_session = Session.objects.create(user=user,
                                              D_vector=None,
                                              P_vector=None,
                                              precision=None)
         new_session.documents.set(list(new_documents))
         new_session.save()
         new = tool.sort_docs_by_dp(new_documents, user.get_D_vector(),
                                    user.get_P_vector())
         for i in range(len(new)):
             print(new[i].id, new_documents[i].id)
         return render(request, "list.html", {
             "documents": new,
             "session": new_session,
             "user_id": user_id
         })