인프런 커뮤니티 질문&답변

SHINH KIM님의 프로필 이미지
SHINH KIM

작성한 질문수

Vue-Django-Bootstrap 뚝딱 블로그

댓글 등록 에러, 도와주세요

작성

·

476

0

댓글 등록시 csrf 에러가 발생합니다.

에러 코드

Forbidden (CSRF token from the 'X-Csrftoken' HTTP header has incorrect length.): /api/post/comment/add/
[10/Jan/2023 00:47:03] "POST /api/post/comment/add/ HTTP/1.1" 403 2564
Forbidden (CSRF token from the 'X-Csrftoken' HTTP header has incorrect length.): /api/post/comment/add/
[10/Jan/2023 01:01:20] "POST /api/post/comment/add/ HTTP/1.1" 403 2564

axios code

    onSubmitForm() {
      let form = new FormData();
      form.set("post", this.post?.id);
      form.set("content", this.commentValue);
      axios
        .post("/api/post/comment/add/", form, {
          // headers: { "X-CSRFToken": "{{csrf_token}}" },
        })
        .then((res) => {
          console.log(res.data);
        });
    },

views.py

...
class ApiAddComment(BaseCreateView):
    model = Comment
    fields = '__all__'

    def form_valid(self, form):
        self.object = form.save()
        comment = obj_to_comment(self.object)
        return JsonResponse(data=comment, safe=True, status=201)

    def form_invalid(self, form):
        return JsonResponse(data=form.errors, safe=True, status=400)

urls.py

...  
path('post/comment/add/', views.ApiAddComment.as_view(), name='add_comment'),

 

 

@csrf_exempt
class ApiAddComment(BaseCreateView):
...

이런식으로 시도해보니  as_view()가 없다는 에러가 발생해서 이 부분은 포기했습니다.

 

 

답변 1

0

김석훈님의 프로필 이미지
김석훈
지식공유자

안녕하세요. 독자님.

CSRF 관련 아래 코드를 <script> 내 상단에 넣었는지요 ?

<script>
    axios.defaults.xsrfCookieName = 'csrftoken';
    axios.defaults.xsrfHeaderName = 'X-CSRFTOKEN';

그리고 참고로 CBV에 데코레이터를 붙일 때는, 아래 내용 참고하세요.

 https://docs.djangoproject.com/en/4.1/topics/class-based-views/intro/#decorating-the-class

SHINH KIM님의 프로필 이미지
SHINH KIM
질문자

이것 저것 수정 하다보니 해결 되었습니다.

똑같이 하기에는 복붙코딩 될 것 같아, 강의와는 좀 다르게 진행하다보니 에러가 가끔씩 나오네요

감사합니다.

SHINH KIM님의 프로필 이미지
SHINH KIM

작성한 질문수

질문하기