• $Django 站点:样式--文章--分类文章--文章详情--文章评论点赞--文章评论点赞统计(数据库优化)


    <h3>个人站点下的</h3>

    知识点

        url (r'(?P<username>w+)/p/(?P<id>d+)', xiangxi,name='xxx'),#文章详情页面
        url (r'dianzhan/', dianzhan),                   #文章详情中点赞的一个接收ajax请求路由
        url (r'pinlun/', pinlun),                     #文章详情中评论的一个接收ajax请求路由
        url (r'(?P<username>w+)/(?P<n>a|b|c)/(?P<d>.*)', zhandian.as_view ()),#个人站点页面 分类页面
        url (r'(?P<username>w+)/', zhandian.as_view ()),      #个人站点页面

    1.样式

    a.css

    2.所有文章

    class zhandian(View):
        def get(self,request,username,*args,**kwargs):
            username = username
            user = models.User_info.objects.filter (username=username).first ()
            blog = user.blog
            wen=models.Wenzhang.objects.filter(blog=blog)

    3.分类下的文章

    人站点下的所有文章进行再次过滤

    4.文章详情

    #略

    5.文章评论点赞

    #点赞注意问题:1 事物 2 一个用户只能点赞一次unique_together=('user_info','wenzhang')
    def dianzhan(request):
            dic = {'status': 100, 'msg': ''}
            if request.user.is_authenticated ():
                id = request.POST.get ('id')
                x = models.Dianzan.objects.filter (user_info=request.user, wenzhang_id=id)
                if x:
                    dic = {'status': 101, 'msg': '该用户已点击过'}
                else:
                    is_up = request.POST.get ('is_up')
                    import json
                    is_up = json.loads (is_up)
                    from django.db import transaction
                    with transaction.atomic ():
                        models.Dianzan.objects.create (user_info=request.user, wenzhang_id=id, is_up=is_up)
                        # models.Dianzan.objects.filter(is_up=True).values('wenzhang').annotate(c=Count('wenzhang')).values('wenzhang','c')
                        # models.Dianzan.objects.filter(is_up=False).values('wenzhang').annotate(c=Count('wenzhang')).values('wenzhang','c')
                        if is_up == True:
                            models.Wenzhang.objects.filter (id=id).update (upnum=F ('upnum') + 1)
                            dic['msg'] = '点赞成功'
                        else:
                            models.Wenzhang.objects.filter (id=id).update (downnum=F ('downnum') - 1)
                            dic['msg'] = '点踩成功'
            else:
                dic['status'] = 101
                dic['msg'] = '请先登录'
            print (dic)
            return JsonResponse (dic)

    #评论注意问题:1 安全的html文本通过过滤器 safe 可以不转义 显示优雅的页面 2 评论中的回复评论
    #略

    6.文章评论点赞统计

    数据库优化:把这个连表查询得到的数据,直接写入文章表中,每次浏览器显示的数据直接从文章表中读取

    class Wenzhang (models.Model):
        id = models.AutoField (primary_key=True)
        title = models.CharField (max_length=32)
        category = models.ForeignKey (to='Category', to_field='id', null=True, blank=True)
        blog = models.ForeignKey (to='Blog', to_field='id', null=True, blank=True)
        content = models.TextField ()
        desc = models.CharField (max_length=300)
        create_time = models.DateTimeField (auto_now_add=True)
        tag = models.ManyToManyField (to='Tag', through='Wen_Tag', through_fields=('wenzhang', 'tag'))
        upnum=models.IntegerField(default=0)
        downnum=models.IntegerField(default=0)
        pinnum = models.IntegerField (default=0)
      #往关联表中添加一条评论点赞数 通过事物文章表中更新增加1(用到F函数)
  • 相关阅读:
    c#—— Task.FromResult 的使用
    libCurl的C++引用
    Mono Compatibility
    dos命令弹出对话框---Msg命令详解
    自解压的方式创建VC++程序的打包
    Microsoft Visual Studio 6.0 Enterprise Edition
    CRegKey 注册表操作
    数据库之 表与表之间的关系
    数据库之完整性约束
    数据库之数据类型
  • 原文地址:https://www.cnblogs.com/3sss-ss-s/p/10066680.html
Copyright © 2020-2023  润新知