def register(request): #获取参数 user = request.POST.get("user") #获取用户帐号 passwd = request.POST.get("passwd") #获取密码 name = request.POST.get("name") #获取用户昵称 email = request.POST.get("email") #获取邮箱 CreateTime = int(time.time()) #获取当前时间戳 #判断用户名及密码是否为空 if user and passwd: #如果用户名和密码不为空则: user_ORM = User.objects.filter(user__exact=user) # 查询user是否在表中 passwd_md5 = md5(passwd) #对密码进行MD5加密 #判断用户是否被注册 if not user_ORM: #如果没有注册则写入数据并保存 DATA = User(user=user, passwd=passwd_md5, name=name, email=email, CreateTime=CreateTime, status=0) DATA.save() return JsonResponse({"Success": "Register OK!"}) else: # 如果表中有该用户则返回错误提示 return JsonResponse({"Error": "User already registered"}) else: #如果传入的用户名或密码为空时则返回以下信息: return JsonResponse({"Error": "User name or password is empty!"})
def get(self,request): res = HttpResponse() get = request.GET if('code' in get): code = request.GET['code'] else: res.write({"error":1002,"data":{'info':"Please request with right json_code."}}) return res codejson = self.getUserId(code) if('errcode' in codejson): res.write({"error":1002,"data":{'info':"Please request with right json_code."}}) return res else: openid = codejson['openid'] sessionkey = codejson['session_key'] session = openid + sessionkey session = hashlib.sha1(session.encode(encoding="utf-8")).hexdigest() if len(Sessioninfo.objects.filter(openid=openid)) == 0: se = Sessioninfo(openid=openid,sessionkey=sessionkey,session=session) se.save() user = User(openid=openid) user.save() print('asdasdasd') else: se = Sessioninfo.objects.filter(openid=openid)[0] se.sessionkey = sessionkey se.session = session se.save() print('No!!!!!!') res.write({"error":0,"data":{"openid":openid,"session":session}}) return res
def register(request): statue = "用户注册" if request.method == "POST" and request.POST: registerForm = Register_Forms(request.POST) if registerForm.is_valid(): clear_data = registerForm.cleaned_data u = User( username=clear_data.get('username'), password=hashpassword(clear_data.get("password")), email=clear_data.get("email"), phone=clear_data.get("phone"), # photo=clear_data.get("photo"), ) if user_exist(u.username): usererror = "您输入的用户名重复了,请重新输入" return render_to_response("register.html",locals()) else: u.save() return HttpResponseRedirect('/login') # del request.COOKIES["username"] # del request.session["username"] else: registerForm =Register_Forms() return render_to_response("register.html",locals())
def register(request): if(request.method == "POST"): result = json.loads(request.body) username = result["username"] password = result["password"] phonenumber = result["phonenumber"] code = result["code"] # check if phonenumber corresponds to code if code != cache.get(phonenumber): result = {"code":0,"message":"验证码错误"} return HttpResponse(json.dumps(result,ensure_ascii=False), content_type="application/json,charset=utf-8") # phonenumber existed if User.objects.filter(phonenumber=phonenumber): result = {"code":0,"message":"手机号已被注册"} return HttpResponse(json.dumps(result,ensure_ascii=False), content_type="application/json,charset=utf-8") # username existed if User.objects.filter(username=username): result = {'code':0,"message":"用户名已被注册"} return HttpResponse(json.dumps(result,ensure_ascii=False), content_type="application/json,charset=utf-8") # success user = User(username=username, password=password, phonenumber=phonenumber) user.save() result = {'code':1,"message":"success"} return HttpResponse(json.dumps(result,ensure_ascii=False), content_type="application/json,charset=utf-8")
def find_pwd_handler(r): phone = r.d.phone User.get_by_phone(phone) SendMobile.send_captcha(r, phone, SendMobile.FIND_PWD) return dict( next_mode=ReCaptcha.MODE_FIND_PWD_CODE, toast_msg='', )
def register(request, useremail, username, password: str): md5 = hashlib.md5() password = make_password(password) password = str(md5.hexdigest()) user = User(user_email=useremail, user_password=password, user_name=username) user.save() render(request, '', context={ 'register': '注册成功', 'status': '200' })
def post(request): """ POST /api/user/ 创建用户 """ invite_code = request.d.invite_code if invite_code is not None: # print(invite_code) user = User.create_invite(**request.d.dict()) else: user = User.create(**request.d.dict('username', 'password')) return Auth.get_login_token(user)
def register_count(): # 提交的所有信息 # phone = request.form.get('mobile') # imagecode = request.form.get('imagecode') # phonecode = request.form.get('phonecode') # pwd = request.form.get('password') # pwd2 = request.form.get('password2') data = request.get_json() phone = data.get('mobile') pwd = data.get('password') phonecode = data.get('sms_code') # 验证信息完整性 if not all([phone, phonecode, pwd]): msg = '请输入完整信息' return jsonify(statucode.INFO_IS_NOT_COMPLETE) reg = re.match('((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[035-8])|(18[0-9])|166|198|199|(147))\\d{8}', phone) # 验证数据有效性 if not reg: return jsonify(statucode.PHONE_NUMBER_IS_INVALID) # 验证用户是否已存在 if User.query.filter_by(phone=phone).first(): return jsonify(statucode.USER_EXISTS) # 验证图片验证码 # if not imagecode: # return jsonify(statucode.IMAGE_CODE_ERROR) # 验证手机验证码 phone_code = redis_store.get('SMSCode_' + phone) if phonecode != phone_code.decode('utf-8'): return jsonify(statucode) # 删除数据库中用户的短信信息 redis_store.delete('SMSCode_' + phone) # 保存用户数据到数据库 user_register = User() user_register.name = phone user_register.phone = phone # 密码加密 user_register.pw_hash = generate_password_hash(pwd) try: db.session.add(user_register) db.session.commit() except Exception as e: db.session.rollback() return jsonify(statucode.DATABASE_ERROR) return jsonify(statucode.COUNT_REGISTER_SUCCESS)
def bind_email(request): openid = request.GET.get('openid', request.POST.get('openid', '')) username = request.GET.get('nickname', request.POST.get('username', '')) type = request.GET.get('type', request.POST.get('type', '')) avatar = request.GET.get('avatar', request.POST.get('avatar', '')) if request.method == 'POST': form = BindEmail(request.POST) if form.is_valid(): openid = form.cleaned_data['openid'] username = form.cleaned_data['username'] email = form.cleaned_data['email'] password = form.cleaned_data['password'] type = form.cleaned_data['type'] avatar = form.cleaned_data['avatar'] users = User.objects.filter(email=email) if users: user = users[0] else: while User.objects.filter(username=username): username = username + '*' user = User(username=username, email=email) user.set_password(password) user.is_active = True user.avatar = avatar user.oauth = True user.save() oauth_ex = OAuth_ex(user=user, openid=openid, type=type) oauth_ex.save() login(request, user, backend='django.contrib.auth.backends.ModelBackend') data = {} data['goto_url'] = '3397/' data['goto_time'] = 10000 data['goto_page'] = True data['message_title'] = '绑定账号成功' data[ 'message'] = u'绑定成功!您的用户名为:<b>%s</b>。您现在可以同时使用本站账号和此第三方账号登录本站了!' % username return render_to_response('oauth/response.html', data) else: form = BindEmail( initial={ 'openid': openid, 'nickname': username, 'type': type, 'image_url': avatar, }) return render(request, 'oauth/bind_email.html', context={ 'form': form, 'type': type })
def login(request): if User.userAuth(request, tokkening=True): return redirect('/users/') if request.method == 'POST': print 'loging..' username = request.POST['username'] password = request.POST['password'] try: user = User.objects.get(username=username) except User.DoesNotExist: msg = 'Error. User not found.' print msg return render_to_response('login.html', {'msg': msg}, context_instance=RequestContext(request)) except User.MultipleObjectsReturned: msg = 'Error. Multiple user. Please contact with administrator.' return render_to_response('login.html', {'msg': msg}, context_instance=RequestContext(request)) if user.passwordCompare(password): user.login(request) msg = 'Login successfully' print msg return redirect('/users/') else: msg = 'Error. Wrong password.' return render_to_response('login.html', {'msg': msg}, context_instance=RequestContext(request)) else: return render_to_response('login.html', context_instance=RequestContext(request))
def previewTestData(request, problem_id, case_id, mode): # mode = 0: view input mode = 1: view output logger.info(str(request).replace("\n", "\t")) try: u = User.getSessionUser(request.session) if not u: raise Err(request, 'not login') if not problem_id: raise Err(request, 'problem illegal') try: p = Problem.getById(int(problem_id)) except: raise Err(request, 'problem illegal') if not p.canManageProblem(u): raise Err(request, 'no priv') case_id = int(case_id) if case_id >= p.data_count: # [0, data_count) raise Err(request, 'testdata illegal') mode = int(mode) if mode != 0 and mode != 1: raise Err(request, 'testdata mode illegal') data_preview = p.generateTestDataPreview(case_id, mode) return render(request, 'newtpl/problem/previewTestData.html', {'data_preview': data_preview}) except Exception as e: logger.error(str(e).replace('\n', '\t')) return render(request, Err.ERROR_PAGE)
def index(request): return render_to_response( 'newtpl/index.html', { 'user': User.getSessionUser(request.session), 'tpl_sp_page': True, 'tpl_nav_act': 'index', })
def rejudgeSubmission( request, sid): logger.info(str(request).replace("\n\r","\t")) """ rejudge the very submission with the specific sid """ try: sid = int( sid) u = User.getSessionUser( request.session) if not u: raise Err( request, err='not login') try: s = Submission.getById( sid) except: raise Err( request, err='no submission', log_format=( '{0}'.format( sid), ''), user_format=( u'{0}'.format( sid), u'不要搞笑!!'), ) if not s.problem_index.contest.course_class.canBeManaged( u): raise Err( request, err = 'no priv') Submission.rejudgeSubmission( s) return redirect( 'Submission:contest_status', contest_id=s.problem_index.contest.cid) except Exception as e: logger.error(str(e).replace("\n\r","\t")) return render( request, Const.NEW_ERROR_PAGE, { 'errmsg': unicode(e), }, )
def showBoardByDynamicScore(request, cId): logger.info(str(request).replace("\n", "\t")) try: u = User.getSessionUser(request.session) if not u: raise Err(request, 'not login') try: c = Contest.getById(cId) except: raise Err(request, 'no resource') try: c.canEnterContest(u) except: raise Err(request, 'no priv') return render(request, "newtpl/statistic/board_dynamic_score.html", { 'contest': c, 'tpl': { 'has_priv': Contest.hasPriv(c.course_class, u) } }) except Exception as e: logger.error(str(e).replace("\n", "\t")) return render(request, Err.ERROR_PAGE)
def viewAllClarifications(request, cid): logger.info(str(request).replace("\n", "\t")) try: u = User.getSessionUser(request.session) if not u: raise Exception(Const.NOT_LOGGED_IN) c = Contest.getById(cid) if not c: raise Exception(Const.CONTEST_NOT_EXIST) cs = Clarification.getByContestId(cid) try: c.canEnterContest(u) can_add_clar = True except: can_add_clar = False try: c.canBeManaged(u) can_update_clar = True except: can_update_clar = False return render( request, 'newtpl/contest/viewAllClars.html', { 'clars': cs, 'contest': c, 'can_add_clar': can_add_clar, 'can_update_clar': can_update_clar }) except Exception as e: logger.error(unicode(e).replace('\n', '\t')) return render(request, Err.ERROR_PAGE, {'errmsg': unicode(e)})
def answerClarification(request, clar_id): logger.info(str(request).replace("\n", "\t")) try: u = User.getSessionUser(request.session) if not u: raise Exception(Const.NOT_LOGGED_IN) clar = Clarification.getById(clar_id) if not clar: raise Exception('No such Clarification!') c = clar.contest if not c: raise Exception(Const.CONTEST_NOT_EXIST) try: c.canBeManaged(u) except: raise Exception('No Privilege!') if request.method != 'POST': return render(request, 'newtpl/contest/answerClar.html', {'clar': clar}) form = AnswerClarificationForm(request.POST) try: if form.is_valid(): answer = form.cleaned_data['answer'] clar.updateAnswer(answer, u) return redirect('Contest:view_all_clars', c.cid) else: raise Exception('Invalid Answer!') except Exception as e: raise e except Exception as e: logger.error(unicode(e).replace('\n', '\t')) return render(request, Err.ERROR_PAGE, {'errmsg': unicode(e)})
def listManageProblem(request, pageId="1"): # modified logger.info(str(request).replace("\n", "\t")) try: pageId = int(pageId) u = User.getSessionUser(request.session) if not u: raise Err(request, 'not login') if u.priv == 'student': raise Err(request, 'no priv') problemList = Problem.problemManageList(u) """ tres = Problem.problemList(u) if (pageId-1)*Const.PROBLEM_PER_PAGE>=len(tres): raise Err(request, 'unknown err') res = tres[(pageId-1)*Const.PROBLEM_PER_PAGE:Const.PROBLEM_PER_PAGE] """ info = {} if u.university.isAdmin(u): info['admin'] = True return render(request, "newtpl/problem/manageProblemList.html", { 'problem_list': problemList, 'info': info, 'tpl': { 'sp': True } }) except Exception as e: logger.error(str(e).replace("\n", "\t")) return render(request, Err.ERROR_PAGE, {'errmsg': unicode(e)})
def get_user_from_session(request): from User.models import User """get user from session if login""" user_id = load_session(request, 'user', once_delete=False) if user_id is None: return Ret(Error.REQUIRE_LOGIN) return User.get_user_by_id(user_id)
def get_login_token(user: User): token, _dict = JWT.encrypt(dict( user_id=user.pk, )) _dict['token'] = token _dict['user'] = user.d() return _dict
def get_talk_by_username(cls, username): user = User.get_user_by_username(username) if (user.talked): talk = Talk.objects.get(talker=user) else: talk = None return talk
def register(): '''注册''' if request.method == 'POST': nickname = request.form.get('nickname', '').strip() password = request.form.get('password', '').strip() gender = request.form.get('gender', 'unknow').strip() city = request.form.get('city', '上海').strip() avatar = request.files.get('avatar') birthday = request.form.get('birthday', '2000-01-01').strip() bio = request.form.get('bio', '').strip() if not (nickname and password): return render_template('register.html', error='昵称或密码不为空') safe_password = utils.make_password(password) # 安全处理密码 avatar_url = utils.save_avatar(nickname, avatar) # 保存头像,并返回头像网址 user = User(nickname=nickname, password=safe_password, gender=gender, city=city, avatar=avatar_url, birthday=birthday, bio=bio) db.session.add(user) try: db.session.commit() except IntegrityError: # 例: IntegrityError: (1062, "Duplicate entry 'xx' for key 'xxxxx'") db.session.rollback() return render_template('/user/register.html', error='昵称和密码能为空') return redirect('/user/login') else: return render_template('/user/register.html')
def registe(request): name = request.POST['username'] pass_word = make_password(request.POST['password']) foo = request.POST['identity'] if (foo == 'manager'): is_admin = True else: is_admin = False print("注册信息:" + name + ' ' + ' ' + pass_word + ' ' + str(is_admin)) user = User(name, pass_word, is_admin) list = User.objects.all() if user in list: # 神奇的默认只比较了主键orz return render(request, 'user/registeFailure.html') else: user.save() return render(request, 'user/registeSuccess.html')
def answerClarification(request, clar_id): logger.info(str(request).replace("\n","\t")) try: u = User.getSessionUser(request.session) if not u: raise Exception(Const.NOT_LOGGED_IN) clar = Clarification.getById(clar_id) if not clar: raise Exception('No such Clarification!') c = clar.contest if not c: raise Exception(Const.CONTEST_NOT_EXIST) try: c.canBeManaged(u) except: raise Exception('No Privilege!') if request.method != 'POST': return render(request, 'newtpl/contest/answerClar.html', {'clar': clar}) form = AnswerClarificationForm(request.POST) try: if form.is_valid(): answer = form.cleaned_data['answer'] clar.updateAnswer(answer, u) return redirect('Contest:view_all_clars', c.cid) else: raise Exception('Invalid Answer!') except Exception as e: raise e except Exception as e: logger.error(unicode(e).replace('\n', '\t')) return render(request, Err.ERROR_PAGE, {'errmsg': unicode(e)})
def previewTestData(request, problem_id, case_id, mode): # mode = 0: view input mode = 1: view output logger.info(str(request).replace("\n","\t")) try: u = User.getSessionUser(request.session) if not u: raise Err(request, 'not login') if not problem_id: raise Err(request, 'problem illegal') try: p = Problem.getById(int(problem_id)) except: raise Err(request, 'problem illegal') if not p.canManageProblem(u): raise Err(request, 'no priv') case_id = int(case_id) if case_id >= p.data_count: # [0, data_count) raise Err(request, 'testdata illegal') mode = int(mode) if mode != 0 and mode != 1: raise Err(request, 'testdata mode illegal') data_preview = p.generateTestDataPreview(case_id, mode) return render(request, 'newtpl/problem/previewTestData.html', {'data_preview': data_preview}) except Exception as e: logger.error(str(e).replace('\n','\t')) return render(request, Err.ERROR_PAGE)
def addRecord(request, cid): try: u = User.getSessionUser(request.session) if not u: raise Err(request, err='not login') c = Contest.getById(cid) try: c.canBeManaged(u) except: raise Err(request, err='no priv') cp = c.getContestProblem() if request.method == 'POST': form = ChooseProbForm(cp, request.POST) if form.is_valid(): Cheat.addRecord(cp_set=form.cleaned_data['contest_problem']) Cheat.antiCheat() return redirect('Cheat:show_cheat_result', cid=c.cid) else: raise Err(request, err='unknown err') else: form = ChooseProbForm(cp) return render(request, 'newtpl/cheat/addRecord.html', {'tpl':{'sp':True,}, 'contest':c, 'form':form,}) except Exception as e: return render(request, Err.ERROR_PAGE)
def listProblem(request, pageId="1"): # modified logger.info(str(request).replace("\n","\t")) try: pageId = int(pageId) u = User.getSessionUser(request.session) if not u: raise Err(request, 'not login') tres = Problem.problemList(u) if (pageId-1)*Const.PROBLEM_PER_PAGE>=len(tres): raise Err(request, 'unknown err') res = tres[(pageId-1)*Const.PROBLEM_PER_PAGE:pageId*Const.PROBLEM_PER_PAGE] res = tres probs = [] for p in res: all_submits = GeneralSubmission.objects.filter(problem = p) all_accepts = all_submits.filter(status = 'Accepted') submits = all_submits.count() accepts = all_accepts.count() ratio = 0 if submits == 0 else 100 * accepts / submits probs.append({'accepts': accepts, 'submits': submits, 'ratio': ratio, 'prob': p}) paginator = Paginator(probs, Const.PROBLEM_PER_PAGE) pageId = min(max(int(pageId), 1), paginator.num_pages) #return render(request,"newtpl/problem/problemList.html",{'tpl':{'sp':False}, 'problems': probs}) return render(request,"newtpl/problem/problemList.html",{'tpl':{'sp':False}, 'problems': paginator.page(pageId)}) except Exception as e: logger.error(str(e).replace("\n","\t")) return render(request, Err.ERROR_PAGE)
def logout(request): if User.userAuth(request, tokkening=True): user = User.objects.get(id=request.session['id']) user.logout(request) return redirect('/') else: return redirect('/')
def showStudentByCCId(request): id = request.GET.get('id', 1) user = User.getSessionUser(request.session) if user == False: errmsg = u'请先登录' return render(request, 'error.html', {'errmsg': errmsg, 'user': user}) ''' try : courseClass = CourseClass.getById(id) except Exception as e: return render(request, 'error.html', {'errmsg' : e, 'user' : user}) if courseClass.isAdmin(User) == False : errmsg =u'您不是该课程分班的课程分班管理员,无法查看该课程分班的学生' return render(request, 'error.html', {'errmsg' : e, 'user' : user}) allStudent = courseClass.getAllStudent() ''' allStudent = [] allStudent.append(User.objects.get(pk=1)) allStudent.append(User.objects.get(pk=1)) return render(request, 'lyy/showStudentByCCId.html', { 'allStudent': allStudent, 'user': user })
def post(request): """ POST /api/user/token 登录获取token """ user = User.authenticate(**request.d.dict()) return Auth.get_login_token(user)
def listContestByPriv(request, ccId, pageId='1'): """ view used to list all contest a user can manage, course_class restricted """ try: u = User.getSessionUser(request.session) if not u: messages.info(request, u'请先登录') return render(request, 'newtpl/contest/contestListByPriv.html') cc = CourseClass.getById(ccId) if not Contest.hasPriv(cc, u): raise Exception(Const.NOT_PVLG) contestList = Contest.getByCourseClass(cc) now = datetime.now() for c in contestList: c.course_class_name = unicode(c.course_class.getFullName()) c.title = unicode(c.contest_title) if c.start_time+timedelta(minutes=c.length)<now: c.status = 'ended' elif c.start_time > now: c.status = 'scheduled' else: c.status = 'running' paginator = Paginator(contestList, Const.CONTEST_PER_PAGE) pageId = min(max(int(pageId), 1), paginator.num_pages) return render(request, 'newtpl/contest/contestListByPriv.html', {'contest_list': paginator.page(pageId), 'course_class': cc, 'tpl':{'has_priv': True, 'nav_act':'contest',}}) except Exception as e: return render(request, Const.ERROR_PAGE, {'errmsg': unicode(e), })
def updateContestNotice(request, cId, cnId): try: u = User.getSessionUser(request.session) if not u: raise Exception(Const.NOT_LOGGED_IN) c = Contest.getById(cId) cn = ContestNotice.getById(cnId) c.canBeManaged(u) if request.method == 'POST': form = contestNoticeForm(request.POST) if form.is_valid(): cnTitle = form.cleaned_data['title'] cnContent = form.cleaned_data['content'] cn.updateNotice(cnTitle, cnContent) return redirect('Contest:show_contest_notice', cId, cn.id) else: return render(request, 'newtpl/contest/updateContestNotice.html', {'form': form, 'cid': cId, 'cnid': cnId, 'tpl':{'has_priv': True, 'sp': True, 'nav_act':'contest',}}) else: form = contestNoticeForm( initial={ 'title': cn.notice_title, 'content': cn.notice_content, } ) return render(request, 'newtpl/contest/updateContestNotice.html', {'form': form, 'cid': cId, 'cnid': cnId, 'tpl':{'has_priv': True, 'sp': True, 'nav_act':'contest',}}) except Exception as e: return render(request, Const.ERROR_PAGE, {'errmsg': unicode(e), })
def login_qt_pwd_handler(r): qt = r.d.qt pwd = r.d.pwd user = User.authenticate(qt, None, pwd) return Auth.get_login_token(user)
def rejudgeGeneralSubmission( request, gsid): """ rejudge the very general submission with the specific id """ try: gsid = int( gsid) u = User.getSessionUser( request.session) if not u: raise Err( request, err='not login') try: g_s = GeneralSubmission.getById( gsid) except: raise Err( request, err='no generalsubmission', log_format=( '{0}'.format( gsid), ''), user_format=( u'{0}'.format( gsid), u'别扯了!!'), ) # fake if u.priv == 'student': raise Err( request, err = 'no priv') GeneralSubmission.rejudgeGeneralSubmission( g_s) return redirect( 'Submission:status') except Exception as e: return render( request, Const.NEW_ERROR_PAGE, { 'errmsg': unicode(e), }, )
def listContestByAuthor(request, pageId='1'): """ view used to list all contest created by the specific user """ try: u = User.getSessionUser(request.session) if not u: messages.info(request, u'请先登录') return render(request, 'newtpl/contest/contestListByAuthor.html') contestList = Contest.getByAuthor(u) now = datetime.now() for c in contestList: c.course_class_name = unicode(c.course_class.getFullName()) c.title = unicode(c.contest_title) if c.start_time+timedelta(minutes=c.length)<now: c.status = 'ended' elif c.start_time > now: c.status = 'scheduled' else: c.status = 'running' paginator = Paginator(contestList, Const.CONTEST_PER_PAGE) pageId = min(max(int(pageId), 1), paginator.num_pages) return render(request, 'newtpl/contest/contestListByAuthor.html', { 'contest_list': paginator.page(pageId), 'tpl':{'has_priv': True, 'nav_act':'contest',}}) except Exception as e: return render(request, Const.ERROR_PAGE, {'errmsg': unicode(e), })
def viewAllClarifications(request, cid): logger.info(str(request).replace("\n","\t")) try: u = User.getSessionUser(request.session) if not u: raise Exception(Const.NOT_LOGGED_IN) c = Contest.getById(cid) if not c: raise Exception(Const.CONTEST_NOT_EXIST) cs = Clarification.getByContestId(cid) try: c.canEnterContest(u) can_add_clar = True except: can_add_clar = False try: c.canBeManaged(u) can_update_clar = True except: can_update_clar = False return render(request, 'newtpl/contest/viewAllClars.html', {'clars': cs, 'contest': c, 'can_add_clar': can_add_clar, 'can_update_clar': can_update_clar}) except Exception as e: logger.error(unicode(e).replace('\n', '\t')) return render(request, Err.ERROR_PAGE, {'errmsg': unicode(e)})
def require_login_func(request): """需要登录 并根据传入的token获取user """ jwt_str = request.META.get('HTTP_TOKEN') if jwt_str is None: return Ret(Error.REQUIRE_LOGIN) from Base.jtoken import jwt_d ret = jwt_d(jwt_str) if ret.error is not Error.OK: return ret dict_ = ret.body try: user_id = dict_["user_id"] except KeyError as err: deprint(str(err)) return Ret(Error.STRANGE) from User.models import User ret = User.get_user_by_id(user_id) if ret.error is not Error.OK: return ret o_user = ret.body if not isinstance(o_user, User): return Ret(Error.STRANGE) request.user = o_user return Ret()
def register(request): try: if request.method != 'POST': return render(request, 'newtpl/register.html', {}) form = RegisterForm(request.POST) if form.is_valid(): username = form.cleaned_data['username'] passwd_1 = form.cleaned_data['passwd1'] passwd_2 = form.cleaned_data['passwd2'] if passwd_1 != passwd_2: raise Exception(u'两次密码不一致') test_uni = University.getByName('test') new_user = User.addUser(username, passwd_1, test_uni, 'student') group = Group.getById(52) group.addMember(new_user) messages.add_message(request, messages.SUCCESS, u'注册用户test#%s成功!' % username) return redirect("/") # return redirect('User:viewuser', uid = new_user.uid) else: raise Exception('注册失败!') except Exception as e: logger.error(unicode(e).replace('\n', '\t')) messages.error(request, u'输入信息不合法或该用户已被注册!') return render(request, Err.ERROR_PAGE)
def get_login_token(user: User): token, _dict = JWT.encrypt(dict( user_id=user.pk, ), expire_second=30 * 60 * 60 * 24) _dict['token'] = token _dict['user'] = user.d() return _dict
def save(self): user = User() user.username = self.username user.set_password(self.password) user.email = self.email if self.signature: user.signature = self.signature user.save() return user
def showContestProblemStatistics(request, p_index=None, cid=None): logger.info(str(request).replace("\n", "\t")) """ view used to show statistics of a problem in a contest """ try: u = User.getSessionUser(request.session) if not u: raise Err(request, err='not login') cid = int(cid) c = Contest.getById(cid) p_index = p_index if p_index else '' try: contest_problem = ContestProblem.getBy(c, p_index) except: raise Err( request, err='no contestproblem', log_format=('{0}'.format(p_index), ''), user_format=(u'{0}'.format(p_index), u'搞错了什么吧!'), ) if not contest_problem.contest.course_class.canBeManaged(u): raise Err(request, err='no priv') all_submissions = Submission.submissionList(cp=contest_problem) submissions = all_submissions.filter( status='Accepted').order_by('run_time')[:20] status_list = [] for i in Const.STATUS_CN.iterkeys(): status_list.append({ 'name': Const.STATUS_CN[i], 'number': all_submissions.filter(status=i).count() }) for sub_s in submissions: sub_s.status_color = Const.STATUS_COLOR[ sub_s.status] if sub_s.status in Const.STATUS_COLOR else '' sub_s.status_cn = Const.STATUS_CN[sub_s.status] return render( request, 'newtpl/statistic/contest_problem.html', { 'submissions': submissions, 'contest_problem': contest_problem, 'status_list': status_list, 'tpl': { 'sp': True } }) except Exception as e: logger.error(str(e).replace("\n", "\t")) return render(request, Err.ERROR_PAGE, {'errmsg': unicode(e)})
def userDetail(request, uid): try: u = User.getById(uid) except: return HttpResponse(status=404) if request.method == 'GET': serializer = UserSerializer(u) return JSONResponse(serializer.data)
def generalSubmissionList(request, page_id='1'): """ @view: list general submission """ try: page_id = int(page_id) u = User.getSessionUser(request.session) if not u: raise Err( request, err='not login') # fake if u.priv == 'university': has_priv = True else: has_priv = False user = u if not has_priv else None lang_list = [('gcc','GNU C'), ('g++','GNU C++'), ('java','java')] form = generalListForm( lang_list, request.GET) if form.is_valid(): if form.cleaned_data['problem_id']: try: p = Problem.getById( form.cleaned_data['problem_id']) except: raise Err( request, err='request err', log_format=( 'form invalid', 'problem_id error'), user_format=( u'输入的内容不合法', u'没有这道题!') ) else: p = None else: raise Err( request, err='example err', log_format=( 'form invalid', ''), user_format=( u'输入的内容不合法', '') ) g_subs = GeneralSubmission.generalSubmissionList( u=user, p=p, uname=form.cleaned_data['username'], language=form.cleaned_data['language'], status_selected=form.cleaned_data['status'], university=u.university) if 'rejudge' in request.GET: if has_priv: map( lambda x: GeneralSubmission.rejudgeGeneralSubmission( x), g_subs) else: raise Err( request, err = 'no priv') paginator = Paginator( g_subs, Const.STATUS_PER_PAGE) page_id = min(max(int(page_id), 1), paginator.num_pages) g_s = paginator.page(page_id) for g_s_index in g_s: g_s_index.status_color = Const.STATUS_COLOR[g_s_index.status] if g_s_index.status in Const.STATUS_COLOR else '' g_s_index.status_cn = Const.STATUS_CN[ g_s_index.status] return render(request, 'newtpl/submission/general/status.html', {'general_list': g_s, 'form':form, 'tpl':{'can_manage': True if has_priv else False}}) except Exception as e: return render(request, Err.ERROR_PAGE, { 'errmsg': unicode(e) } )
def addContest(request, ccId): try: u = User.getSessionUser(request.session) if not u: raise Err(request, 'not login') try: cc = CourseClass.getById(ccId) except: raise Err(request, 'no resource') try: Contest.canAddContest(cc, u) except: raise Err(request, 'no priv') recentProblem = Problem.problemListByAuthor(u) if request.method == 'POST': form = contestForm(request.POST) pIdList = request.POST.getlist('problem_id') #pIdList = Problem.problemList(u) pTitleList = request.POST.getlist('problem_title_custom') pCnt = len(pIdList) if form.is_valid(): for i in xrange(pCnt): p = Problem.getById(pIdList[i]) if not p.canViewProblem(u): raise Err(request, 'no problem priv') pInfos = [(pIdList[i], pTitleList[i], chr(65+i)) for i in xrange(pCnt)] cTitle = form.cleaned_data['title'] cDesc = form.cleaned_data['desc'] cStartDate = form.cleaned_data['start_date'] cStartTime = form.cleaned_data['start_time'] cLength = form.cleaned_data['length'] cBoardStop = form.cleaned_data['board_stop'] cType = form.cleaned_data['contest_type'] cBoardType = form.cleaned_data['board_type'] permitLang = reduce(add, [Const.LANG_MASK[lang] for lang in form.cleaned_data['lang_limit']]) c = Contest.addContest(u, cc, cTitle, pInfos, datetime.combine(cStartDate, cStartTime), cDesc, cLength, cBoardStop, cType, cBoardType, permitLang) return redirect('Contest:show_contest', c.cid) else: problemList = [{'pid': pIdList[x], 'title': pTitleList[x], 'origTitle':Problem.getById(pIdList[x]).prob_title} for x in xrange(pCnt)] return render(request, 'newtpl/contest/addContest.html', {'cc':cc, 'form': form, 'recent_problem': recentProblem, 'problem_list': problemList, 'tpl':{'has_priv': True, 'sp': True, }}) else: form = contestForm() return render(request, 'newtpl/contest/addContest.html', {'cc':cc, 'form': form, 'recent_problem': recentProblem, 'tpl':{'has_priv': True, 'sp': True, }}) except Exception as e: messages.info(request, unicode(e)) return render(request, Err.ERROR_PAGE)
def user_signup_save(request): fname = request.POST.get('fname') lname = request.POST.get('lname') email = request.POST.get('email') password = request.POST.get('password') user = User(fname=fname, lname=lname, email=email, last_login=datetime.now()) user.set_password(password) #force_insert=True forces the database to do an insert rather then an update status = user.save(force_insert=True) if status == 'success': subject = 'Welcome to PLTL' with open("templates/SignUpNotification.txt", "r") as data: msgbody = data.read() msg = 'Dear ' + fname +',\n' + msgbody from_mail = settings.EMAIL_HOST_USER send_mail(subject, msg, from_mail, [email, from_mail], fail_silently=True) return redirect('home')
def showResult(request, cid, page='1'): try: u = User.getSessionUser(request.session) if not u: raise Err(request, err='not login') c = Contest.getById(int(cid)) try: c.canBeManaged(u) except: raise Err(request, err='no priv') if ('threshold' in request.GET) and request.GET['threshold']: threshold = float(request.GET['threshold']) else: threshold = Const.CHEAT_DEFAULT_THRESHOLD cheatList = Cheat.getCheatList(contest=c, threshold=threshold) paginator = Paginator(cheatList, Const.CHEAT_PER_PAGE) page = min(max(int(page), 1), paginator.num_pages) cl = paginator.page(page) ipa = [] ipb = [] for idx, element in enumerate(cl): info_a = eval(element.sub1.other_info) info_b = eval(element.sub2.other_info) #cl[idx] = {'c': element, 'ip_a': info_a['submit_ip'], 'ip_b': info_b['submit_ip']} ipa.append(info_a['submit_ip']) ipb.append(info_b['submit_ip']) return render(request, 'newtpl/cheat/showResult.html', {'tpl':{'sp':True,}, 'contest':c, 'cheat_list':cl, 'ipa':ipa,'ipb':ipb }) except Exception as e: return render(request, Err.ERROR_PAGE) # def codeDiff(request, ctid): # try: # u = User.getSessionUser(request.session) # if not u: # raise Err(request, err='not login') # ct = Cheat.objects.select_related('sub1__user', 'sub2__user').get(ctid=ctid) # # try: # ct.contest.canBeManaged(u) # except: # raise Err(request, err='no priv') # # return render(request, 'newtpl/cheat/codeDiff.html', {'tpl':{'sp':True,}, 'sub1':ct.sub1, 'sub2':ct.sub2}) # # # except Exception as e: # return render(request, Err.ERROR_PAGE) """
def userLogin(request): username, password = '', '' if request.META.has_key('HTTP_AUTHORIZATION'): authmeth, auth = request.META['HTTP_AUTHORIZATION'].split(' ', 1) if authmeth.lower() == 'basic': auth = auth.strip().decode('base64') username, password = auth.split(':', 1) u = User.getUserByRawUsername(username) if u!=None and u!=False and u.checkPasswd(password): serializer = UserSerializer(u) return JSONResponse(serializer.data) return HttpResponse(status=404)
def chooseCourseClass(request): try: u = User.getSessionUser(request.session) if not u: raise Err(request, 'not login') if u.isStudent(): raise Err(request, 'no priv') cc_list = CourseClass.getAllManagedClasses(u) return render(request,'newtpl/contest/chooseCourseClass.html',{'list': cc_list, 'tpl':{'sp':True}}) except Exception as e: return render(request, Err.ERROR_PAGE)
def token_detail(request, format=None): if User.userAuth(request, tokkening=False) == False: print u"Access denied" return render_to_response('denied.html', context_instance=RequestContext(request)) if request.method == 'GET': try: user = User.objects.get(id=request.session['id']) token = Token.objects.get(id=user.token_id) except Token.DoesNotExist or User.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) serializer = TokenSerializer(token) return Response(serializer.data)
def login(request): if request.method != 'POST': return redirect('/') try: username = request.POST['username'] passwd = request.POST['passwd'] u = User.getUserByRawUsername(username) if u!=None and u!=False and u.checkPasswd(passwd): request.session['uid'] = u.uid return redirect(referer(request)) else: username = '******' + username u = User.getUserByRawUsername(username) if u!=None and u!=False and u.checkPasswd(passwd): request.session['uid'] = u.uid return redirect(referer(request)) else: raise Exception('login err') except Exception as e: messages.error(request, u'用户名或密码错误') return redirect(referer(request))
def showContestNotice(request, cId, cnId): try: u = User.getSessionUser(request.session) if not u: raise Exception(Const.NOT_LOGGED_IN) c = Contest.getById(cId) cn = ContestNotice.getById(cnId) c.canEnterContest(u) return render(request, 'newtpl/contest/showContestNotice.html', {'cid': cId, 'contest_notice': cn, 'tpl': {'has_priv': Contest.hasPriv(c.course_class, u), 'sp': True, 'nav_act':'contest',}}) except Exception as e: return render(request, Const.ERROR_PAGE, {'errmsg': unicode(e), })
def chooseCourse(request): logger.info(str(request).replace("\n","\t")) try: u = User.getSessionUser(request.session) if not u: raise Err(request, 'not login') if u.isStudent(): raise Err(request, 'no priv') cs_list = Course.getAllManagedCourses(u) return render(request,'newtpl/problem/chooseCourse.html',{'list': cs_list, 'tpl':{'sp':True}}) except Exception as e: logger.error(str(e).replace("\n","\t")) return render(request, Err.ERROR_PAGE)
def showProblem(request,p_id): # modified logger.info(str(request).replace("\n","\t")) try: u = User.getSessionUser(request.session) if not u: raise Err(request, 'not login') p_id = int(p_id) p = Problem.getById(p_id) if not p.canViewProblem(u): raise Err(request, 'no priv') p.desc=json.loads(p.prob_desc) return render(request, "newtpl/problem/showProblem.html", { 'p':p, 'tpl':{'sp':True}}) except Exception as e: logger.error(str(e).replace("\n","\t")) return render(request, Err.ERROR_PAGE)
def user_list(request, format=None): if User.userAuth(request, tokkening=True) == False: print u"Access denied" return render_to_response('denied.html', context_instance=RequestContext(request)) if request.method == 'GET': users = User.objects.all() serializer = UserSerializer(users, many=True) return Response(serializer.data) elif request.method == 'POST': serializer = UserSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def listProblem(request, pageId="1"): # modified logger.info(str(request).replace("\n","\t")) try: pageId = int(pageId) u = User.getSessionUser(request.session) if not u: raise Err(request, 'not login') tres = Problem.problemList(u) if (pageId-1)*Const.PROBLEM_PER_PAGE>=len(tres): raise Err(request, 'unknown err') res = tres[(pageId-1)*Const.PROBLEM_PER_PAGE:Const.PROBLEM_PER_PAGE] return render(request,"newtpl/problem/problemList.html",{'res': res,'tpl':{'sp':True}}) except Exception as e: logger.error(str(e).replace("\n","\t")) return render(request, Err.ERROR_PAGE)
def listContestByUser(request, pageId='1'): """ view used to list all contest a user can participate """ logger.info(str(request).replace("\n","\t")) tpl = {'nav_act':'contest'} try: u = User.getSessionUser(request.session) if not u: messages.info(request, u'请先登录') contestList = None else: now = datetime.now() if u.priv == 'student': contestList = Contest.getByStudent(u) else: contestList = Contest.getByAdmin(u) for c in contestList: c.course_class_name = unicode(c.course_class.getFullName()) c.title = unicode(c.contest_title) if c.start_time+timedelta(minutes=c.length)<now: c.status = 'ended' elif c.start_time > now: c.status = 'scheduled' else: c.status = 'running' paginator = Paginator(contestList, Const.CONTEST_PER_PAGE) pageId = min(max(int(pageId), 1), paginator.num_pages) if contestList and contestList.count>0: return render(request, 'newtpl/contest/contestListByUser.html', { 'contest_list': paginator.page(pageId), 'tpl':tpl}) else: return render(request, 'newtpl/contest/contestListByUser.html', { 'tpl':tpl, 'err_msg_list': [ u'您暂时没有可以参加的测验。', u'不如走出教室,呼吸一下新鲜空气,给家人打个电话,陪陪妹子?' ]}) except Exception as e: return render(request, Const.ERROR_PAGE, {'errmsg': unicode(e), })
def addRecord2(request, cid): try: u = User.getSessionUser(request.session) if not u: raise Err(request, err='not login') c = Contest.getById(cid) try: c.canBeManaged(u) except: raise Err(request, err='no priv') cp = c.getContestProblem() Cheat.addRecord(cp_set=cp) Cheat.antiCheat() return redirect('Cheat:show_cheat_result', cid=c.cid) except Exception as e: return render(request, Err.ERROR_PAGE)
def deleteProblem(request, problem_id): logger.info(str(request).replace("\n","\t")) try: user = User.getSessionUser(request.session) if not user: raise Err(request, 'not login') try: prob = Problem.getById(int(problem_id)) except: raise Err(request, 'problem illegal') if not prob.author.university.isAdmin(user): raise Err(request, 'no priv') prob.deleteProblem() messages.add_message(request, messages.SUCCESS, u'删除题目%d成功' % int(problem_id)) return redirect('Problem:manage') except Exception as e: return render(request, Err.ERROR_PAGE, {'errmsg': unicode(e)})