Ejemplo n.º 1
0
def signup(request):
    """ 회원가입 기능 """
    try: 
        logger.info("/account/signup")
        if  request.is_ajax() == False:
            return HttpResponseNotFound('<h1>Page not found</h1>')
        
        email = request.POST.get('email')
        password = request.POST.get('password')
        user = User.objects.create_user(email, password)
        
        if user is not None: #Verify form's content existence
            if user.is_active: #Verify validity
                login(request, user)
                result = ErrClass('NOERROR').toDict()
                result['user_index'] = user.pk
                result['email'] =  user.email
                return HttpResponse(json.dumps(result), content_type="application/json")
       
        else:
            return ErrClass("ID_OR_PASSWORD_MISMATCH").response()
    
    except IntegrityError as e:
        logger.error(traceback.format_exc() )
        ## 동일 이메일 중복으로 인한 에러
        if "1062" in str(e):
            return ErrClass('DUPLICATED_EMAIL').response()
        
        return ErrClass('UNKNWON_ERROR').response()
    
    except Exception as e:
        logger.error(traceback.format_exc() )
        return ErrClass('UNKNWON_ERROR').response()
Ejemplo n.º 2
0
def _login(request):
    """ User login 기능 """
    try: 
        logger.info("/account/login")
        if  request.is_ajax() == False:
            c = {}
            c.update(csrf(request))
            response = TemplateResponse(request, 'accounts/login.html', c )
            response.render()
            return response
        
        email = request.POST.get('email')
        password = request.POST.get('password')
        next = request.POST.get('next') 
        user = authenticate(username=email, password=password)
        if user is not None:  ## 로그인 체크
            if user.is_active:  ## 유저 상태 active 인지 검사(admin 이 false 설정을 해서 로그인을 막아 놓았을 수 있다.)
                login(request, user)
                result = ErrClass('NOERROR').toDict()
                result['user_index'] = user.pk
                result['email'] =  user.email
                if next:
                    result['redirect_url'] = next
                else:
                    result['redirect_url'] = "/todo/list"
                return HttpResponse(json.dumps(result), content_type="application/json")
            return ErrClass("UNACTIVE_USER").response()
       
        else:
            return ErrClass("ID_OR_PASSWORD_WRONG").response()
    
    except Exception as e:
        logger.error(traceback.format_exc() )
        return ErrClass('UNKNWON_ERROR').response()
Ejemplo n.º 3
0
def importData(request):
    try:
        importfile = request.FILES["importfile"]
        file_mime = mimetypes.guess_type(importfile.name)
        jsonDataList = []
        importfile.seek(0)
        if file_mime[0] == "text/csv":
            reader = csv.reader(io.StringIO(importfile.read().decode('utf-8')))
            for row in reader:
                # id, priority, text, create_time, done
                done = row[4] == "True"
                item = {
                    "id": row[0],
                    "priority": row[1],
                    "text": row[2],
                    "create_time": int(row[3]),
                    "done": done
                }
                jsonDataList.append(item)
        elif file_mime[0] == "application/vnd.ms-excel":
            wb = load_workbook(filename=io.BytesIO(importfile.read()))
            worksheet = wb.active
            for row in worksheet.rows:
                # id, priority, text, create_time, done
                done = row[4].value
                item = {
                    "id": row[0].value or "",
                    "priority": str(row[1].value),
                    "text": row[2].value,
                    "create_time": int(row[3].value),
                    "done": done
                }
                jsonDataList.append(item)
        elif file_mime[0] == "application/json":
            jsonDataByte = importfile.read()
            jsonDataStr = jsonDataByte.decode("utf-8")
            jsonDataList = json.loads(jsonDataStr)
        else:
            return ErrClass('UNKNWON_ERROR').response()

        result = ErrClass('NOERROR').toDict()
        result["jsonData"] = jsonDataList
        return HttpResponse(json.dumps(result),
                            content_type="application/json")

    except Exception as e:
        logger.error(traceback.format_exc())
        return ErrClass('UNKNWON_ERROR').response()
Ejemplo n.º 4
0
def exportData(request):
    try:
        filetype = request.GET.get("filetype")
        jsonDataString = request.GET.get("jsonData")
        jsonDataList = json.loads(jsonDataString)
        if filetype == "csv":
            response = HttpResponse(content_type='text/csv')
            response[
                'Content-Disposition'] = 'attachment; filename="todolist.csv"'

            # id, priority, text, create_time, done
            writer = csv.writer(response)
            for item in jsonDataList:
                writer.writerow([
                    item["id"], item["priority"], item["text"],
                    item["create_time"], item["done"]
                ])
            return response
        elif filetype == "excel":
            wb = openpyxl.Workbook()
            worksheet = wb.active
            for item in jsonDataList:
                worksheet.append([
                    item["id"], item["priority"], item["text"],
                    item["create_time"], item["done"]
                ])
            response = HttpResponse(content=save_virtual_workbook(wb),
                                    content_type='application/vnd.ms-excel')
            response[
                'Content-Disposition'] = 'attachment; filename="todolist.xls"'
            return response
        elif filetype == "json":
            response = HttpResponse(content=jsonDataString,
                                    content_type='application/json')
            response[
                'Content-Disposition'] = 'attachment; filename="todolist.json"'
            return response
        return ErrClass('UNKNWON_ERROR').response()

    except Exception as e:
        logger.error(traceback.format_exc())
        return ErrClass('UNKNWON_ERROR').response()
Ejemplo n.º 5
0
    def create(self, request, *args, **kwargs):
        """
        HTTP POST Method 를 사용했을 때 호출되는 부분
        email 과 password 를 이용해서 user 를 생성한다. 
        """
        param_dict = request.data.copy()

        serializer = self.get_serializer(data=param_dict)
        if serializer.is_valid() == False:
            if 'username'  in serializer.errors:
                return ErrClass("DUPLICATED_EMAIL").response()
            return ErrClass('UNKNWON_ERROR').response()
        
        self.perform_create(serializer)
        user = serializer.instance
        user.is_active = True
        user.set_password(param_dict['password'])  ## 패스워드의 경우 Hashmode 을 이용하기 위해 해당 메소드를 이용한다. 
        user.save()
        result = ErrClass('NOERROR').toDict()
        return HttpResponse(json.dumps(result), content_type="application/json")
Ejemplo n.º 6
0
 def deletelist(self, request):
     """
     HTTP POST Method 를 사용하고  deletelist 라는 path
     email 과 password 를 이용해서 user 를 생성한다.
     
     ids[] : 삭제하고 싶 
     """
     ids = request.POST.getlist("ids[]")
     objects = self.get_queryset().filter( id__in = ids )
     objects.delete()
     result = ErrClass('NOERROR').toDict()
     return HttpResponse(json.dumps(result), content_type="application/json")
Ejemplo n.º 7
0
def _list(request):
    try: 
        logger.info("/account/list")
        c = {}
        c.update(csrf(request))
        response = TemplateResponse(request, 'accounts/list.html', c )
        response.render()
        return response
    
    except Exception as e:
        logger.error(traceback.format_exc() )
        return ErrClass('UNKNWON_ERROR').response()
Ejemplo n.º 8
0
 def emailselectlist(self, request):
     """
     유저 이메일 리스팅
     """
     objects = self.get_queryset().all( )
     objects_list = objects.values( "id", "email")
     data = [] 
     for item in objects_list:
         data.append( item  )
     result = ErrClass('NOERROR').toDict()
     result["data"] = data
     return HttpResponse(json.dumps(result), content_type="application/json")
Ejemplo n.º 9
0
def sample(request):
    try:
        logger.info("/sample")
        if request.path.startswith("/rest") == False:
            c = {}
            response = TemplateResponse(request, 'sample.html', c)
            response.render()
            return response

    except Exception as e:
        logger.error(traceback.format_exc())
        return ErrClass('UNKNWON_ERROR').response()
Ejemplo n.º 10
0
def dayofweeklist(request):
    try:
        logger.info("/todos/dayofweeklist")
        c = {}
        c.update(csrf(request))
        if request.user.is_superuser:
            response = TemplateResponse(request,
                                        'todos/admin_dayofweeklist.html', c)
        else:
            response = TemplateResponse(request, 'todos/dayofweeklist.html', c)
        response.render()
        return response

    except Exception as e:
        logger.error(traceback.format_exc())
        return ErrClass('UNKNWON_ERROR').response()
Ejemplo n.º 11
0
    def save(self, request):
        """
        HTTP POST Method 를 사용하고  save 라는 path 를 사용할 때
        데이터를 저장하는 함수
        저장하려는 데이터와 실제 DB에 저장된 데이터가 있을 때, 
        그 차이에 대해서만 저장하고 삭제한다. 
        """
        try:
            jsonDataString = request.POST.get("jsonData")
            jsonDataList = json.loads(jsonDataString)
            josnDataDict = {}  ## id 를 key  로,  나머지 데이터를 value 로하는 dict
            index = 2**32
            for item in jsonDataList:
                _id = item["id"]
                if _id == "":  ## 새로 추가 되는 아이템인 경우 id 가 0일 수 있는데, 이 경우 임의의 id를 부여
                    item["id"] = _id = index
                    index += 1
                josnDataDict[_id] = item
            jsonDataSet = set(josnDataDict.keys())

            objects = self.get_queryset().filter(user=request.user)
            objectsDict = {}  ## id 를 key로, 나머지 데이터를 value 로하는 dict
            for item in objects:
                _id = item.id
                objectsDict[_id] = item
            objectsSet = set(objectsDict.keys())

            ## jsonData 와 objects(DB) 를 비교해서
            ## jsonData 에만 존재, 데이터 추가
            itemToAdd = jsonDataSet - objectsSet
            for _id in itemToAdd:
                item = josnDataDict[_id]
                create_time = datetime.datetime.fromtimestamp(
                    item["create_time"] / 1000)
                todo = Todo(user=request.user,
                            priority=item["priority"],
                            text=item["text"],
                            done=item["done"],
                            create_time=create_time)
                todo.save()

            ## objects에만 존재 데이터 삭제
            itemToDelete = objectsSet - jsonDataSet
            for _id in itemToDelete:
                item = objectsDict[_id]
                self.get_queryset().filter(id=_id).delete()

            ## 양쪽에 다 존재하는 데이터의 done과 priority 상태 확인
            itemToUpdateCheck = objectsSet.intersection(jsonDataSet)
            for _id in itemToUpdateCheck:
                itemWeb = josnDataDict[_id]
                itemDB = objectsDict[_id]
                if itemWeb["done"] != itemDB.done or itemWeb[
                        "priority"] != itemDB.priority:
                    self.get_queryset().filter(id=_id).update(
                        done=itemWeb["done"], priority=itemWeb["priority"])

            result = ErrClass('NOERROR').toDict()
            return HttpResponse(json.dumps(result),
                                content_type="application/json")
        except Exception as e:
            logger.error(traceback.format_exc())
            return ErrClass('UNKNWON_ERROR').response()