POST http://127.0.0.1:8000/follow/fav/8/1/ 403 (ЗАПРЕЩЕНО)

-1

Я не уверен, почему я получаю эту ошибку. У меня есть любимое приложение, и ajax должен разваливаться. потому что эта ошибка возникает, когда я нажимаю кнопку, которая должна работать, но не работает прямо сейчас. я предполагаю, что я: m не хватает некоторых csrf или файлов cookie или неправильной версии jQuery... Я не уверен. Это мой код

и в html файле

<div class="actions">{% if user.is_authenticated %}{% fav_item category user %}{% endif %}</div>
</div>

Я также опубликую views.py

def ajax_login_required(view_func):
    def wrap(request, *args, **kwargs):
        if request.user.is_authenticated():
            return view_func(request, *args, **kwargs)
        json = simplejson.dumps({'not_authenticated': True})
        return HttpResponse(json, content_type='application/json', status=401)
    wrap.__doc__ = view_func.__doc__
    wrap.__dict__ = view_func.__dict__
    return wrap

@ajax_login_required
def ajax_fav(request, ctype_id, obj_id):
    """

    """
    ctype = get_object_or_404(ContentType, pk=ctype_id)
    item = ctype.get_object_for_this_type(pk=obj_id)    
    if Favorite.objects.filter(user=request.user, content_type=ctype, object_id=obj_id):
        fav = Favorite.objects.get(user=request.user, content_type=ctype, object_id=obj_id)
        fav.delete()
        count = Favorite.objects.favorites_for_object(item).count()
        data_dict = {'id': 0, 'message': fav_settings.FAV_ADD, 'counter': build_message(count), }
    else:        
        fav = Favorite.objects.create_favorite(item, request.user)
        count = Favorite.objects.favorites_for_object(item).count()
        data_dict = {'id': fav.id, 'message': fav_settings.FAV_REMOVE, 'counter': build_message(count), }
    return HttpResponse(simplejson.dumps(data_dict), content_type='application/javascript')

Изменить: /In Console Я получаю js-ошибку Uncaught SyntaxError: Неожиданный идентификатор

$(function(){
    $('a.favIt').on('click', function(){      
        var itemId = $(this).attr('id').split("_")[1];
        $.ajax({
            type: "POST",
            url: $(this).attr("href"),
            data: {csrfmiddlewaretoken: '{{ csrf_token }}'}
            dataType: "json",
            timeout: 2000,
            cache: false,           
            beforeSend: function(XMLHttpRequest) {
                //$("#loader").fadeIn();
            },
            error: function(data, XMLHttpRequest, textStatus, errorThrown){
                $(this).html("Error connecting to the server.");
            },              
            complete: function(XMLHttpRequest, textStatus) {
                //$("#loader").fadeOut();
            },                        
            success: function(data, textStatus, XMLHttpRequest){
                $('#FavIt_'+itemId).html(data.message);
                $('#FavCounter_'+itemId).html(data.counter);
            }
            });             
        return false;
    });
});

он говорит, что это происходит из строки 8, которая является dataType: "json", я опубликовал views.py

Теги:

1 ответ

1
Лучший ответ

Вы должны передать токен csrf как часть данных в ajax-вызове:

data: {csrfmiddlewaretoken: '{{ csrf_token }}'}
  • 0
    «и в html-файле» предполагает, что ajax находится в отдельном js-файле ... но да, отсутствует токен csrf, для которого существует множество дубликатов.
  • 1
    @ Sayse: Это хороший момент. Майк, ты мог бы также прочитать этот ответ: stackoverflow.com/questions/23349883/… .
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню