작성
·
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)
...
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
이것 저것 수정 하다보니 해결 되었습니다.
똑같이 하기에는 복붙코딩 될 것 같아, 강의와는 좀 다르게 진행하다보니 에러가 가끔씩 나오네요
감사합니다.