🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

댓글 작성시 500 Internal Server Error 발생합니다

22.05.19 18:41 작성 조회수 917

0

안녕하십니까 유익한 수업 잘 듣고 있습니다.

제이쿼리 코드나 나머지 html, python 코드들도 고민 끝에 모두 깃허브에 있는 코드와 동일하게 작성하였는데,

댓글 작성시 페이지가 작성된 댓글이 포함된 페이지로 전환되지 않고, 그래도 멈춰 있습니다.

업로드된 댓글을 확인하려면 새로고침을 해야 확인 할 수 있습니다. console에는

POSThttp://127.0.0.1:8000/jstagram/post/9/comment/new 500 (Internal Server Error) 라며 에러가 발생하고 있는데 해결 방안 부탁드립니다..

추가로

cmd창에는

    if request.is_ajax():

AttributeError: 'WSGIRequest' object has no attribute 'is_ajax'

 

이라는 오류가 뜹니다

버튼을 누른 후에도 전환되지 않은 화면입니다

 

console 화면

답변 2

·

답변을 작성해보세요.

0

  1. 서버에서 요청을 정상처리하였다면, 이에 대한 응답을 프론트엔드 측에서 잘 수신했는 지, 브라우저 개발자도구의 Network 탭을 통해서 확인하실 수 있고,
  2. 프론트엔드 측에서 응답을 잘 수신했는 데, 프론트엔드 JS측에서 어떠한 이유로 DOM 조작에 오류가 있어서 그럴 수 있습니다.
  3. 브라우저 콘솔 창에서 오류여뷰를 확인하실 수 있고, 오류가 없다면 로직의 문제이니 이를 브라우저의 디버깅 기능을 활용해서 브레이크포인트 걸어서 차근차근 체크하여 해결을 합니다.

말씀하신 부분은 참조하는 dom id가 달라서, 웹프론트엔드 단에서 댓글 DOM 추가만 안되는 상황인듯 하구요. 본 강의 영상의 수업노트에서 이에 대한 보충이 있으니 확인 부탁드립니다.

확인해보시고 피드백 부탁드립니다.

화이팅입니다. :-)

정유재님의 프로필

정유재

질문자

2022.05.22

감사합니다! 주신 옵션들을 비교해보면서 공부해 봤는데 문제가 없었습니다.

그래서 자잘한 코드들을 처음부터 다시 검토했더니 -comment.html에서

for문을 삭제하지 않아서 댓글들을 전부다 불러오느라 그랬던 것 같습니다.

도움 정말 감사합니다 !

잘 해결하셨군요. 다행입니다. :-)

0

안녕하세요.

아래 오류를 만나셨군요.

AttributeError: 'WSGIRequest' object has no attribute 'is_ajax'

request 객체에 is_ajax 속성이 없다는 오류이구요.

강의에서는 장고 3.x 버전으로 진행하는 데, 현재 장고 4.0 버전을 설치해서 사용 중이신 듯 합니다. 장고의 HttpRequest 객체에서 is_ajax는 장고 4.0부터 제거되었습니다. 장고 3.x에서의 is_ajax 구현은 아래에서 확인하실 수 있는데요.

https://github.com/django/django/blob/3.2/django/http/request.py#L279

강의 진행을 위해서 장고 버전을 3.x으로 내려서 강의를 진행하시고, 강의 완료 후에 장고 버전을 올려보시거나,

혹은 request.is_ajax() 대신에 request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest' 로 써보실 수 있습니다. 이를 커스텀 미들웨어로 만들어서 미들웨어를 통해 is_ajax 함수를 동적으로 request 객체에 붙여보실 수도 있습니다.

화이팅입니다. :-)

정유재님의 프로필

정유재

질문자

2022.05.19

감사합니다! 덕분에 오류가 해결되었습니다.

그럼에도 댓글을 작성하자마자 강의에서 나왔던 것처럼 제 댓글이 추가된 채로 나타나지 않습니다.

views.py에 comment_new 부분입니다.

post card 부분은 깃에 있는 코드와 동일합니다.

@login_required
def comment_new(request, post_pk):
    post = get_object_or_404(Post, pk=post_pk)

    if request.method == 'POST':
        form = CommentForm(request.POST, request.FILES)
        if form.is_valid():
            comment = form.save(commit=False)
            comment.post = post
            comment.author = request.user
            comment.save()
            if request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest':
                return render(request, "jstagram/_comment.html", {
                    "comment": comment,
                })
            return redirect(comment.post)
    else:
        form = CommentForm()
    return render(request, "jstagram/comment_form.html", {
        "form": form,
    })


채널톡 아이콘