当前位置: 首页 > 面试题库 >

Django ajax关注和取消关注

何聪
2023-03-14
问题内容

我有一个跟随者系统,它是用ajax执行的。问题是“关注者”按钮不起作用。并不是点击,并且一天结束时用户数量的关注者数量不会增加。我下面有我的代码

模板

    {% with objects=user.followers.count %}
      <span class="count">
      <span class="total">
        {{ objects }}
      </span>
        follower{{ objects|pluralize }}
      </span>
      <a href="#" data-id="{{ user.id }}" data-action="{% if request.user in user.followers.all %}un{% endif %}follow" class="follow button">
        {% if request.user not in user.followers.all %}
        Follow
        {% else %}
        Unfollow
        {% endif %}
      </a>

{% block query %}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script src=" http://cdn.jsdelivr.net/jquery.cookie/1.4.1/jquery.cookie.min.js "></script>
<script>
var csrftoken = $.cookie('csrftoken'); function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); }
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) { xhr.setRequestHeader("X-CSRFToken", csrftoken);
} }
});
$(document).ready(function(){
  $('a.follow').click(function(e){
    e.preventDefault();
    $.post('{% url "user_follow" %}',
    {
      id: $(this).data('id'), action: $(this).data('action')
    }, function(data){
          if (data['status'] == 'ok') {
            var previous_action = $('a.follow').data('action');
            // toggle data-action $('a.follow').data('action',
            previous_action == 'follow' ? 'unfollow' : 'follow'); // toggle link text
    $('a.follow').text(
         previous_action == 'follow' ? 'Unfollow' : 'Follow');
    // update total followers
    var previous_followers = parseInt(
    $('span.count .total').text());
    $('span.count .total').text(previous_action == 'follow' ? previous_followers + 1 : previous_followers - 1);
    } }
    ); });
}); </script>

{% endblock %}

然后我在base.html中提供了块查询

Views.py

def user_follow(request):
    user_id = request.POST.get('id')
    action = request.POST.get('action')
    if user_id and action:
        try:
            user = User.objects.get(id=user_id)
            if action == 'unfollow':
                Contact.objects.get_or_create( user_from=request.user, user_to=user)
            else:
                Contact.objects.filter(user_from=request.user,user_to=user).delete()
            return JsonResponse({'status':'ok'})
        except User.DoesNotExist:
            return JsonResponse({'status':'ko'})
    return JsonResponse({'status':'ko'})

如有需要,将提供进一步的代码,任何帮助。


问题答案:
def user_follow(request):
    user_id = request.POST.get('id', None)
    action = request.POST.get('action', '')

    FOLLOW_ACTION = 'follow'
    UNFOLLOW_ACTION = 'unfollow'

    if request.user.is_anonymous:
        return JsonResponse({
            'status':'ko',
            'message': 'You must login'}
        )

    if action not in [FOLLOW_ACTION, UNFOLLOW_ACTION]:
        return JsonResponse({
            'status':'ko',
            'message': 'Unknown action {}'.format(action)}
        )

    try:
        user = User.objects.get(id=user_id)
        if action == UNFOLLOW_ACTION:
            Contact.objects.filter(user_from=request.user,user_to=user).delete()
            return JsonResponse({
                'status':'ok'
                })
        else:
            contact, created = Contact.objects.get_or_create( user_from=request.user, user_to=user)
            return JsonResponse({
                'status':'ok',
                'message': 'Following id : {}'.format(contact.id)
            })


    except User.DoesNotExist:
        return JsonResponse({
            'status':'ko'
            'message': 'user id: does not exist: {}'.format(user_id)
        })

您将关注和取消关注混为一谈,如果取消关注则创建联系人。

模板:

{% if request.user != user %}
  <a> Follow ....
{% endif %}


 类似资料:
  • 1.手机版 取消方法:订阅号右上角详情-右上角菜单-取消订阅   2.电脑版 取消方法:订阅号右上角详情-设置-取消订阅

  • 本文向大家介绍微信公众平台开发关注及取消关注事件的方法,包括了微信公众平台开发关注及取消关注事件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了微信公众平台开发关注及取消关注事件的方法。分享给大家供大家参考。具体分析如下: 用户在关注与取消关注公众号时,微信会把这个事件推送到开发者填写的URL,方便开发者给用户下发欢迎消息或者做帐号的解绑. 下面是一个微信公众平台关注和取消关注的实例

  • 列出一个用户的关注者 列出用户正在关注的人 关注一个用户 取消关注一个用户 列出一个用户的关注者 列出一个用户的关注者: GET /users/:user/followers 列出授权用户的关注者: GET /user/followers 参数 名称 类型 描述 limit Integer 获取条数,默认 20 offset Integer 翻页偏移量,默认 0 响应 Status: 200

  • 关注/收藏店铺 (手淘5.2.1以后版本支持),此方法会呼起客户端确认关注界面 Tida.follow({ pubAccountId:'86428989' // 店铺或达人ID }, function(data){ }); data 格式: { "errorCode": 0, "followStatus": true // 是否已关注, true已经关注,false未关

  • 我是Java和Netbeans的新手,想写一个Swing项目来学习。 null [一些小代码示例会很可爱] 谢了。安东尼。

  • 产品简介 开发者可以通过使用此接口,将关注按钮移至顶部导航栏,方便用户更便捷的进行关注操作。 开放标准 对所有入驻小程序的企业开放 jd.showFavoriteMenu(OBJECT) 展示关注按钮(关注按钮默认不展示) OBJECT 参数说明: 参数名 类型 必填 说明 success Function 否 接口调用成功的回调函数 fail Function 否 接口调用失败的回调函数 com