蓝鲸Django: 用户发出点赞功能的实现

来自CloudWiki
跳转至: 导航搜索

后台点赞逻辑的实现

views.py:

@login_required
def like(request):
    user = request.user.username
    status_id = request.POST.get("status_id")

    liked = Reply.objects.filter(author=user,status=status_id,type="0")
    if liked:
        liked.delete()
    else:
        Reply.objects.create(author=user,status=Status.objects.get(id=status_id),type="0")
    return JsonResponse({"result":True})

urls.py:

from moments.views import like
。。。

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',LoginView.as_view(template_name="homepage.html")),
    path('', home),
    path('user',show_user),
    path('status',show_status),
    path('post',submit_post),
    path('exit',LogoutView.as_view(next_page="/")),
    path('register',register),
    path('user/update',update_user),
    path('like',like)
]

前端:弹出点评论交互

初始化

a)查看 bootstrap 文档关于弹出部分: https://v3.bootcss.com/javascript/#popovers


由于性能的原因,工具提示和弹出框的 data 编程接口(data api)是必须要手动初始化的。

在一个页面上一次性初始化所有弹出框的方式是通过 data-toggle 属性选中他们:

status.html:


    
<script>
         $(function () {
                 $('[data-toggle="popover"]').popover()
        })
    </script>
{% endblock %}

给button添加交互功能

Bd20-5-44.png

Bd20-5-45.png

 <button style="float:right;background-color:gray" class="btn btn-default" data-container="body" data-toggle="popover" data-placement="left" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus."><span class="glyphicon glyphicon-option-horizontal" aria-hidden="true" style="color:white"></span></button>

点击查看效果:

Bd20-5-46.png

查看图标

查看 bootstrap 组件提供的图标,https://v3.bootcss.com/components/

Bd20-5-47.png

改写 button 标签属性

改写 button 标签属性,data-html 为 true 可以让弹出内容使用 html,并添加更改光标悬浮样式。

Bd20-5-48.png

<button style="float:right;background-color:gray"
                            class="btn btn-default" data-container="body"
                            data-toggle="popover" data-placement="left"
                            data-content="<span style='cursor:pointer'>
                                         <span class='glyphicon glyphicon-heart'></span>like
                                         </span>
                                         <span style='cursor:pointer'>
                                         <span class='glyphicon glyphicon-comment'></span>comment
                                         </span> "
                             data-html="true">

                           <span class="glyphicon glyphicon-option-horizontal" aria-hidden="true" style="color:white"></span>

                    </button>

验证:

点击按钮,弹出点赞功能框

Bd20-5-49.png

前端:实现点赞功能

Ajax:

<script>
         $(function () {
                 $('[data-toggle="popover"]').popover()
        })

         function like(status_id) {
             $.ajax({
                 url: "/like",
                 type: "post",
                 data: {
                      "status_id": status_id,
                      "csrfmiddlewaretoken": "{{ csrf_token }}"
                 },
                 success: function() {
                       location.reload()
                 }
             })
        }
    </script>

绑定按钮:

Bd20-5-50.png

 <button style="float:right;background-color:gray"
                            class="btn btn-default" data-container="body"
                            data-toggle="popover" data-placement="left"
                            data-content="<span style='cursor:pointer' onclick='like({{ status.id }})'>
                                         <span class='glyphicon glyphicon-heart'></span>like
                                         </span>
                                         <span style='cursor:pointer'>
                                         <span class='glyphicon glyphicon-comment'></span>comment
                                         </span> "
                             data-html="true">

                           <span class="glyphicon glyphicon-option-horizontal" aria-hidden="true" style="color:white"></span>

                    </button>

验证:

Bd20-5-51.png