Programming-[Backend] (421) 썸네일형 리스트형 ngrok: 로컬 서버 인터넷 연결, 콜백 api 예제(AWS 람다) 1. ngrok 이해 ngrok 실행화면 jp로 끝나는 ngrok에서 갖고 있는 일본 서버로 나의 로컬 서버를 연결하여 인터넷에 노출해주었다.(포워딩) 실제 인터넷에 연결된 아무 컴퓨터에서나 Forwarding으로 변경된 https://로 시작하는 주소로 요청을 보내면 HTTP Requests가 정상적으로 들어오는 것을 확인할 수 있다. ngrok 설치 및 실행 방법. 엄청 간단함 ngrok은 내 컴퓨터의 로컬 서버를 ngrok에서 갖고 있는 ip를 이용하여 인터넷으로 연결시켜준다. 그리고 해당 서버로 들어오는 요청을 간단하게 기록(로깅) 해준다! ngrok 사이트에 가입하고, 설치하면 된다. mac 유저라면 brew install ngrok window 유저라면 ngrok.exe를 다운로드 받고 터미널.. [탐험] ffmpeg-ffprobe로 AWS S3에 있는 Video 파일 메타데이터 추출: 비디오 스트림, AWS Presigned URL 방식 이해 1 목차 1. 영상 데이터에 대한 개념 2. AWS Presigned URL 3. 파이썬 서브프로세스, os.system 차이 4. ffmpeg, ffprobe, 메타데이터, 멀티미디어 파일 분석의 한계 사용 코드(파이썬, ffprobe) video_object_key = settings.AWS_MEDIA_LOCATION + "/" + copy_upload_path ##AWS에서 영상에 대한 presigned url 가져오기 location = boto3.client("s3").get_bucket_location( Bucket=settings.AWS_STORAGE_BUCKET_NAME )["LocationConstraint"] url = boto3.client( "s3", config=Config(signa.. [TIL] Django ORM values, annotate, Subquery, OuterRef, JSONField, Type Cast 부분 적용 자세한 내용은 Django 공식 문서에 있다. 여기서는 기존 다른 SQL에서 자주 사용하는 기능들을 한 눈에 대략적으로 파악할 수 있도록만 정리한다. Django 공식 문서 - Queryset https://docs.djangoproject.com/en/4.1/ref/models/querysets/ 코드 User.objects .annotate( user_name=F("name"), comment_file_path=Subquery( Comment.objects.annotate(file_path=F("data__file_path")) .values("data__file_path") .filter(user=OuterRef("pk"))[:1] ), ) .values("user_name", "comment_fi.. [TIL] 부모 Serializer field 값 제거 부모의 field값을 제거하기 기존 View가 ParentSerializer을 사용해서 응답 필드값들을 내보내고 있었는데, 기존과 다르게 재사용하다보니 unnecessary_id=null로 불필요하게 클라이언트에게 전달되는 상황. 해당 ParentSerializer를 ChildSerializer로 한 번 더 감싸고, __init__ 메서드에서 self.fields로 unnecessary_id 값을 제거함 class ChildSerializer( ParentSerializer ): def __init__(self, *args, **kwargs): """ pop unnecessary_id """ super(ChildSerializer, self).__init__( *args, **kwargs ) self.f.. [TIL] Django created_by, modified_by 적용하기 : django crum, settings.AUTH_USER_MODEL 등 1. 기본원리 기본원리는 threading → Local로 개별 쓰레드가 user를 물고와서 Middleware를 통해 Model를 업데이트 해주는 방식 https://solutionschecker.com/questions/django-populate-user-id-when-saving-a-model/ 2. Django Crum library Django crum에서 get_current_user()를 처리하기 전에, 앞선 미들웨어인 AuthenticationMiddleWare에서 Request.user를 불러오는데, 여기서 get_user() 메서드 쪽을 보면 세팅에서 지정한 User를 참고하여 불러오는 것을 확인할 수 있다. 이렇게 구해진 user 정보가 django crum의 middleware로 .. [TIL] Django ModelSerializer의 field, validate()의 data ModelSerializer의 field 구분 어떤 Serializer가 ModelSerializer를 상속받도록 만들었다면, Meta 라는 class를 만들고 그 내부에 field 값들을 적게 된다. 그리고 상위에 custom 필드, read_only_fields를 아래와 같은 방식으로 작성한다. class CustomeSerializer( serializers.ModelSerializer, ): desc = serializers.CharField(write_only=True) color = serializers.CharField( label="색깔", help_text="`#FFFFFF` 형태의 정확한 HEX 값을 입력해주세요.", required=False ) class Meta: model = C.. [TIL] 파이썬 리턴타입 힌트로 속성 탐색, unittest.mock의 @patch 파이썬 리턴타입 힌트로 속성 탐색 아래와 같이 리턴 타입(Snapshot)을 지정하면, 해당 get_snapshot() 메서드를 불러와서 리턴타입으로 사용할 때 속성 탐색이 가능해진다.(아래 사진) def get_snapshot(self) -> Snapshot: return self.context.get("view").get_snapshot() unittest.mock의 @patch unittest.mock의 @patch로 특정 {패키지…메서드}를 무시하고 리턴값을 지정할 수 있다. @patch( "utils.api_processor.start_process", return_value=[200, ""] ) 위 코드는 utils.api_processor 패키지의 start_process 메서드의 실행을 무.. [TIL] get_serializer()와 serializer.save()의 instance, get_object_or_404 get_serializer()와 serializer.save()의 instance get_serializer() 에 들어가는 instance는 serializer의 update() 메서드를 불러오고 updata할 대상을 가리키게 된다. serializer.save()로 넘기는 정보는 클라이언트에서 넘어온 정보가 아니라 서버 측에서 추가로 넘기는 정보이다. 따라서 get_serializer()로 넘기는 정보는 검증 과정을 거쳐서(검증 메서드 통과 후) validated_data에 들어가지만, save()에 넘기는 추가 인자들은 클라이언트에서 넘어온 정보가 아니므로 검증을 거치지 않는다. 다만 똑같이 validated_data에 추가된다. 검증을 거치지 않은 추가적인 정보도 validated_data에 포함.. 이전 1 ··· 17 18 19 20 21 22 23 ··· 53 다음