コード例 #1
0
def delete_person(request):
    """
	Delete a person by his or her student_number
	Http form MUST includes `student_number`
	:param request: httpRequest
	:return: status (success or fail), err_info and err_code
									doesn't exist	0
	"""
    if request.method == 'POST' and token_check(request):

        try:
            person_info = json.loads(request.body.decode('utf-8'))['person']

            target_person = Person.objects.filter(
                student_number=person_info['student_number'])
            if not target_person.exists():
                return JsonResponse({
                    'status':
                    'fail',
                    'err_code':
                    404,
                    'err_info':
                    'no object has student_number = ' +
                    person_info['student_number']
                })
            target_person.delete()
            return JsonResponse({'status': 'success'})

        except DatabaseError as e:
            return JsonResponse({
                'status': 'fail',
                'err_code': e.args[0],
                'err_info': e.args[1],
            })
コード例 #2
0
def add_activity(request):
    """
	Add new person into MySQL databases
	Http form MUST includes `name`, `date` and `time`
	:param request: httpRequest
	:return: status (success or fail), err_info and err_code
	"""
    if request.method == 'POST' and token_check(request):

        try:
            activity_info = json.loads(
                request.body.decode('utf-8'))['activity']

            new_activity = Activity(
                name=activity_info['name'],
                date=activity_info['date'],
                time=activity_info['time'],
                place=activity_info['place']
                if 'place' in activity_info.keys() else '',
                participation=activity_info['participation']
                if 'participation' in activity_info.keys() else 0,
                participator=activity_info['participator']
                if 'participator' in activity_info.keys() else '',
                content=activity_info['content']
                if 'content' in activity_info.keys() else '',
                images=activity_info['images']
                if 'images' in activity_info.keys() else '')

            participators = new_activity.participator.split(',')

            for stu_num in participators:
                person = Person.objects.get(student_number=stu_num)
                person.participation += int(new_activity.participation)
                person.save()

            new_activity.save()

            return JsonResponse({'status': 'success'})

        except DatabaseError as e:
            return JsonResponse({
                'status': 'fail',
                'err_code': e.args[0],
                'err_info': e.args[1],
            })
コード例 #3
0
def delete_activity(request):
    """
	Delete an activity by primary-key `id`
	Http form MUST includes `id`
	:param request: httpRequest
	:return: status (success or fail), err_info and err_code
									doesn't exist	0
	"""
    if request.method == 'POST' and token_check(request):

        try:
            activity_info = json.loads(
                request.body.decode('utf-8'))['activity']

            target_activity = Activity.objects.filter(id=activity_info['id'])
            if not target_activity.exists():
                return JsonResponse({
                    'status':
                    'fail',
                    'err_code':
                    404,
                    'err_info':
                    'no object has id = ' + activity_info['id']
                })

            participators = target_activity.first().participator.split(',')

            if participators[0] != '':
                for stu_num in participators:
                    person = Person.objects.get(student_number=stu_num)
                    person.participation -= int(
                        target_activity.first().participation)
                    person.save()

            target_activity.delete()
            return JsonResponse({'status': 'success'})

        except DatabaseError as e:
            return JsonResponse({
                'status': 'fail',
                'err_code': e.args[0],
                'err_info': e.args[1],
            })
コード例 #4
0
def get_upload_token(request):
    """
	Get Upload token for Qiniu Storage
	:param request: Http-Post including args: filename
	:return: upload_token: Upload Token for upload `filename` on Qiniu
	"""
    if request.method == 'POST':
        if token_check(request):
            request_body = json.loads(request.body.decode('utf-8'))
            if 'filename' in request_body:

                filename = request_body['filename']

                # Generate Qiniu Authorization
                q = Auth(key.ACCESS_KEY, key.SECRET_KEY)

                # Generate Upload Token
                token = q.upload_token(key.BUCKET_NAME, filename, 3600)

                return JsonResponse({
                    'status': 'success',
                    'file_key': filename,
                    'upload_token': token,
                })
            else:
                return JsonResponse({
                    'status': 'fail',
                    'err_code': 400,
                    'err_info': 'argument `filename` missing'
                })
        else:
            return JsonResponse({
                'status': 'fail',
                'err_code': 400,
                'err_info': 'token check error'
            })
    else:
        return JsonResponse({
            'status': 'fail',
            'err_code': 400,
            'err_info': 'unacceptable request method'
        })
コード例 #5
0
def update_person(request):
    """
	Update a person in databases
	:param request: HttpRequest
	:return: status (success or fail), err_info and err_code
									doesn't exist	0
	"""
    if request.method == 'POST' and token_check(request):

        try:
            target_student_number = json.loads(
                request.body.decode('utf-8'))['target_student_number']
            person_info = json.loads(request.body.decode('utf-8'))['person']

            target_person = Person.objects.get(
                student_number=target_student_number)

            if not target_person:
                return JsonResponse({
                    'status':
                    'fail',
                    'err_code':
                    404,
                    'err_info':
                    'no object has student_number = ' + target_student_number
                })

            for key in person_info:
                exec('target_person.' + key + '=' +
                     str(repr(person_info[key])))
            target_person.save()

            return JsonResponse({'status': 'success'})

        except DatabaseError as e:
            return JsonResponse({
                'status': 'fail',
                'err_code': e.args[0],
                'err_info': e.args[1],
            })
コード例 #6
0
def add_person(request):
    """
	Add new person into MySQL databases
	Http form MUST includes `student_number`, `name`, `pinyin` and `gender`
	:param request: httpRequest
	:return: status (success or fail), err_info and err_code
	"""
    if request.method == 'POST' and token_check(request):
        try:
            person_info = json.loads(request.body.decode('utf-8'))['person']

            new_person = Person(
                student_number=person_info['student_number'],
                name=person_info['name'],
                pinyin=person_info['pinyin'],
                gender=person_info['gender'],
                native_province=person_info['native_province']
                if 'native_province' in person_info.keys() else '',
                dormitory=person_info['dormitory']
                if 'dormitory' in person_info.keys() else '',
                birthday=person_info['birthday']
                if 'birthday' in person_info.keys() else '2000-01-01',
                phone_number=person_info['phone_number']
                if 'phone_number' in person_info.keys() else '',
                position=person_info['position']
                if 'position' in person_info.keys() else '',
                participation=person_info['participation']
                if 'participation' in person_info.keys() else 0)

            new_person.save()
            return JsonResponse({'status': 'success'})

        except DatabaseError as e:
            return JsonResponse({
                'status': 'fail',
                'err_code': e.args[0],
                'err_info': e.args[1],
            })
コード例 #7
0
def update_activity(request):
    """
	Update an activity in databases
	:param request: HttpRequest
	:return: status (success or fail), err_info and err_code
									doesn't exist	0
	"""
    if request.method == 'POST' and token_check(request):

        try:
            target_id = json.loads(request.body.decode('utf-8'))['target_id']
            activity_info = json.loads(
                request.body.decode('utf-8'))['activity']

            target_activity = Activity.objects.get(id=target_id)
            if not target_activity:
                return JsonResponse({
                    'status':
                    'fail',
                    'err_code':
                    404,
                    'err_info':
                    'no object has id = ' + target_id
                })

            original_participation = int(target_activity.participation)
            current_participation = int(
                activity_info['participation'] if 'participation' in
                activity_info.keys() else original_participation)

            original_participators = set(
                filter(None, target_activity.participator.split(',')))
            current_participators = set(
                filter(None, activity_info['participator'].split(',')
                       ) if 'participator' in
                activity_info.keys() else original_participators)

            added_participators = current_participators - original_participators
            removed_participators = original_participators - current_participators

            if not current_participation == original_participation:
                for stu_num in original_participators:
                    person = Person.objects.get(student_number=stu_num)
                    person.participation += current_participation - original_participation
                    person.save()

            for stu_num in added_participators:
                person = Person.objects.get(student_number=stu_num)
                person.participation += current_participation
                person.save()

            for stu_num in removed_participators:
                person = Person.objects.get(student_number=stu_num)
                person.participation -= current_participation
                person.save()

            for key in activity_info.keys():
                if not key == 'id':
                    exec('target_activity.' + key + '=' +
                         str(repr(activity_info[key])))

            target_activity.save()

            return JsonResponse({'status': 'success'})

        except DatabaseError as e:
            return JsonResponse({
                'status': 'fail',
                'err_code': e.args[0],
                'err_info': e.args[1],
            })