首页 > 其他 > 详细

136-使用django实现收藏功能

时间:2020-09-07 14:31:24      阅读:107      评论:0      收藏:0      [点我收藏+]

功能概要:

  1. 只能收藏其他人,已经开放的文章
  2. 如果收藏后,对应用户将文章设置为私有,将不再收藏这篇文章
  3. 通过收藏一键完成,但不会直接打开收藏界面
  4. 收藏只产生简要信息的列表,通过链接打开原始文章
  5. 在收藏界面,只显示自己的收藏内容

 

【1】收藏模型。

模型会建立和文章的多对一关系,然后记录谁收藏,文章作者,文章标题,收藏时间。

class CltNote(models.Model):
    clt_relation_note = models.ForeignKey(MyNote, on_delete=models.CASCADE, related_name=‘clt_note‘)
    who_clt = models.CharField(max_length=64)
    author = models.CharField(max_length=64)
    title = models.CharField(max_length=64)
    clt_time = models.DateTimeField(auto_now_add=True)

  

【2】进行收藏时的模板设计。

首先判断当前用户是不是文章的作者,如果是就可以进行“编辑”,如果不是就可以进行“收藏”相关操作;

然后判断是否已经收藏,如果是,显示提示并且不能进行收藏操作;如果否,提供一个链接,执行views里的某个函数。

{% if request.user.username == pk_note.author %}
                <p><a href="{% url ‘notebook:edit_note‘ pk_note.pk %}">编辑</a></p>
            {% else %}
                {% if if_collect %}
                    <p>已收藏</p>
                {% else %}
                <a href="{% url ‘notebook:clt_note‘ pk_note.pk %}">收藏</a>
                {% endif %}
            {% endif %}

  

【3】收藏模型的相关处理。

这个函数里,仍然要首先获得用户和文章作者,然后获取收藏模型相关信息,存入数据库;

再将文章的被收藏数+1,然后保存文章。

# 实现收藏功能,保存相关数据
@login_required
def clt_note(request, pk):
    current_user = request.user
    pk_note = get_object_or_404(MyNote, open_bool=True, id=pk)
    new_clt_note = CltNote()
    new_clt_note.who_clt = current_user.username
    new_clt_note.clt_relation_note = pk_note
    new_clt_note.author = pk_note.author
    new_clt_note.title = pk_note.title
    new_clt_note.save()
    pk_note.collect_count += 1
    pk_note.save()
    return HttpResponseRedirect(reverse(‘notebook:op_one_note‘, args=[pk]))

  

【4】显示收藏,views部分。

由于收藏的界面会和首页类型,因此需要调用get_ten_comment函数,并获取其返回值;

获取所有的收藏信息中,需要过滤收藏者信息;

在判断是否可以前往到具体文章时,判断这篇文章当前是否仍然设置为开放:open_bool = True;

收藏信息仍然使用分页显示方式。

{% block content %}
<div class="left">

    {# show all collect notes with page_id #}
    <div>
    {% for clt_note in page_obj %}
        <p>
            <span>收藏时间:{{clt_note.clt_time}}</span>
            <span>作者:{{clt_note.author}}</span>
            <span>标题:{{clt_note.title}}</span>
            {% if clt_note.clt_relation_note.open_bool %}
                <a href="{% url ‘notebook:op_one_note‘ clt_note.clt_relation_note.pk %}">前往</a>
            {% else %}
                <span>作者已设为私有</span>
            {% endif %}

        </p>
    {% endfor %}
    </div>

    {# function of previous and next  #}
    <div>
    <span>
    {% if page_obj.has_previous %}
        <a href="{% url ‘notebook:all_clt‘ 1 %}">从头</a>
        <a href="{% url ‘notebook:all_clt‘ page_obj.previous_page_number %}">上一页</a>
    {% endif %}

        <span>
            {{page_obj.number}} of {{page_obj.paginator.num_pages}}
        </span>

    {% if page_obj.has_next %}
        <a href="{% url ‘notebook:all_clt‘ page_obj.next_page_number %}">下一页</a>
        <a href="{% url ‘notebook:all_clt‘ page_obj.paginator.num_pages %}">到尾</a>
    {% endif %}
    </span>
    </div>

</div>
{% endblock content %}

  

  

django要实现收藏功能也很简单。设计一个好的模型至关重要!!!

 

  

 

136-使用django实现收藏功能

原文:https://www.cnblogs.com/lzhshn/p/13626118.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!