스프링부트 프로젝트 진행 중 다음과 같은 에러가 발생 javax.persistence.EntityNotFoundException: Unable to find ... 원인 및 해결 방법 @OneToOne, @OneToMany 와 같은 annotation로 매핑된 id값이 0이거나 매핑되어있는 id의 자식객체가 없을 때 발생 DB에서 기존 테이블을 삭제하고 백업한 테이블 정보로 덮어 씌울 때 index의 Auto-Increament 설정이 누락되어 발생 DB에서 Auto-Increament 설정을 해주어 해결
Backend
controller에서 Map은 파라미터로 쓸수 있고 모델로도 쓸 수 있다. 그냥 쓰면 모델로 사용한다는 것이고 파라미터로 사용할 때는 @RequestParam과 같이 사용하여야 한다. @PostMapping("/api/foos") @ResponseBody public String updateFoos(@RequestParam Map allParams) { return "Parameters are " + allParams.entrySet(); } @RequestParam을 선택적으로 사용할 수도 있다. @GetMapping("/api/foos") @ResponseBody public String getFoos(@RequestParam(required = false) String id) { return "I..
@ControllerAdvice를 사용하여 예외처리 하는 방법을 알아보자. @ControllerAdvice public class ExceptionControllerAdvice { @ExceptionHandler(Exception.class) public String handleException(Exception e, Model model) { model.addAttribute("msg", "에러 발생"); return "error/error"; } @ExceptionHandler(NoHandlerFoundException.class) @ResponseStatus(value = HttpStatus.NOT_FOUND) public String handle404(NoHandlerFoundException e..
servlet-context.xml 의 많은 설정들 중 resources에 대해 알아보자. /assets/ 로 시작하는 부분은 Dispatcher로 넘기는게 아니라 /resources/assets/ 로 이동시키라는 의미이다. css, js 등이 적용이 안되는 현상의 원인으로 자주 등장한다. Dispatcher로 넘어가버리게 되어 404에러가 발생하기 때문이다.
문제 프론트 서버에서 django로 api 요청보냈을때 options method로 반환되고 콘솔에 CORS에러 발생 해결 django-cors-header 적용 (https://github.com/adamchainz/django-cors-headers) 해결과정 CORS에 대해 알아보고, django에 관련 기능이 있는지 구글링 원인분석 1) CORS (Crosss-Origin Resource Sharing) 웹 페이지 상의 제한된 리소스를 최초 자원이 서비스된 도메인 밖의 다른 도메인으로부터 요청할 수 있게 허용하는 구조 2) fetch로 api를 가져올 때는 Http를 사용 이 때 브라우저는 요청 header에 출처를 담아 origin 필드로 전송 서버가 이를 보고 응답을 할 때 header에 ac..
터미널이 갑자기 venv에서 벗어났을 경우 다시 venv에 들어가기 위한 방법을 기록하기 위해 작성 해당 프로젝트 경로에서 아래를 입력한다. $ venv/Scripts/activate
Serializer안에서 request.user을 사용하는 방법을 기록하기 위해 작성 Response를 보낼 때 context 안에 request를 담아서 보내면 된다. 아래는 예시이다. def get(self, request): return Response(UserSerializer(request.user, context=request # context에 request담아서 Serializer에 전송 ).data) class HobbySerializer(serializers.ModelSerializer): same_hobby_users = serializers.SerializerMethodField() def get_same_hobby_users(self, obj): user = self.context..
Poetry 공부 중 기록을 위해 한글 주석을 남겨 에러가 발생 / 해결과정을 기록하기 위해 작성 에러 UnicodeDecodeError: 'cp949' codec can't decode byte 0xec in position 546: illegal multibyte sequence 원인 pyproject.toml 내 한글 주석 (windows 환경에서만 발생) 해결 한글 주석 제거
JsonResponse 왜 사용하는가? - response를 커스터마이징 하여 전달할때 사용한다 - http status code에 더하여 메세지를 입력해서 전달할 수 있다. 특징 HttpResponse의 subclass로, JSON-encoded response를 생성할수 있게 해준다. 대부분의 기능은 superclass에서 상속받는다. default Content-Type header = application/json >>> from django.http import JsonResponse # import from django.http >>> response = JsonResponse({'foo': 'bar'}) # 첫번째 argument는 dictionary 이어야한다 >>> response.con..
serializer에 ManyToMany Field를 등록할 때에는 속성값을 통해 Serializer에게 알려주어야한다. 아래는 ManyToManyField인 hobby를 serializer에 등록하는 예시이다. class UserProfile(models.Model): user = models.OneToOneField( to=User, verbose_name="사용자", on_delete=models.CASCADE, primary_key=True) hobby = models.ManyToManyField("Hobby", verbose_name="취미") introduction = models.TextField("소개") birthday = models.DateField("생일") age = models...
same_hobby_users = serializers.SerializerMethodField() def get_same_hobby_users(self, obj): return "Test" class Meta: model = HobbyModel fields = [ "name", "same_hobby_users" ]
1. args, kwargs를 사용하는 예제 코드 def sum_numbers(*args): return sum(args) class UserView(APIView): def get(self, request): numbers = request.data.get("numbers", []) result = sum_numbers(*numbers) return Response({'sum': result}) ''' [input] { "numbers": [1,2,3,4] } [output] { "sum": 10 } ''' 2. mutable과 immutable은 어떤 특성이 있고, 각 특성에 대한 자료형 [mutable] - 값이 변할 수 있다. - List / Dictionary [immutable] - 값이 변할..
장고 프로젝트에 등록되지 않은 파일에서 장고를 사용할 경우 다음과 같은 오류가 나타난다. django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings. 등록되어 있지 않은 파일을 아래와 같이 직접 장고에 등록해줘야한다. import os import django os.environ.setdefault("DJANGO_SETTINGS_MODULE",..
YYYY-MM-DD 형태로 변경하는 방법은 아래와 같다. {{ value|date:"Y-m-d" }}
같은 페이지를 사용할 때 어떤 url을 통해 왔는지 검사하며 값을 바꿔줄 때 사용할 수 있는 유용한 방법이다. {% if request.resolver_match.view_name == 'show_user_page' %}something{% endif %} ex) {% if request.resolver_match.view_name == 'get_recommend_list' %} 추천 도서 {% else %} 전체 도서 {% endif %}