BBS 03day

BBS_03 day:

自定义标签 过滤器:

-->  当页面上某一块区域的内容需要在多个页面使用
并且该区域的内容需要通过传参才能够正常显示
那么你可以考虑使用inclusion_tag

步骤:
    1.在应用下必须新建一个名叫templatetags的文件夹
    2.在该文件夹内新建任意名称的py文件
    3.在该py文件内必须先写两句代码:
        from django.template import Library
        register = Library()

文章的点赞,点彩功能:

点赞点踩业务逻辑:
    1.判断当前用户是否登录
    2.当前这篇文章是否是当前用户自己写的
    3.当前这篇文章用户是否已经点过
    4.操作数据库 完成数据修改:
        1.点赞点踩添加数据的时候
        2.文章表里面对应的普通字段也得修改

文章的评论功能

子评论:
    点击回复按钮到底发生了几件事???
    1.自动获取点击评论的评论人的姓名
    2.拼接  @+人名+\n
    3.将拼接好的内容添加到评论框中  并且评论框自动聚焦
            
完善点:
    存储子评论的时候  @人名\n 不应该存储进去
    在渲染的时候 应该渲染出人名


django-debug-toolbar (django插件: 方便数据的查询,展示) 
import json
json.encoder()

-->查看json   python  之间的转换关系

transaction用法:

django transaction用法:
from django.db import transaction
from django.http import HttpResponse
from django.utils.decorators import method_decorator


# 类中添加装饰器,保证在该类中所有的数据库操作都在一个事物中
@method_decorator(transaction.atomic, name='dispatch')
class MyView1(object):
    
    def get(self, request):
        return HttpResponse('GET')
    
    def post(self, request):
        return HttpResponse('POST')


class MyView2(object):
    
    # 保证在该函数中所有的数据库操作都在一个事物中
    @transaction.atomic
    def post(self, request):

        # 设置事物保存点(可设多个)
        t1 = transaction.savepoint()

        # 如果有异常情况可回滚到指定的保存点
        transaction.savepoint_rollback(t1)

        # 如果没有异常可提交事物
        transaction.savepoint_commit(t1)
        return HttpResponse('POST')

自定义 标签代码展示:

from django.template import Library
from app01 import models
from django.db.models import Count
from django.db.models.functions import TruncMonth


register = Library()

@register.inclusion_tag('left_menu.html')
def my_menu(username):
    user_obj = models.Userinfo.objects.filter(username=username).first()
    blog = user_obj.blog
    # 提供侧边栏所需要的所有的数据
    # 1.查询当前用户每一个分类及分类下的文章数
    category_list = models.Category.objects.filter(blog=blog).annotate(num=Count('article')).values_list('name','num','pk')
    # 2.查询当前用户每一个标签级标签下的文章数
    tag_list = models.Tag.objects.filter(blog=blog).annotate(num=Count('article')).values_list('name','num','pk')
    # 3.按照年月分组
    date_list = models.Article.objects.filter(blog=blog).annotate(month=TruncMonth('create_time')).values('month').annotate(num=Count('pk')).values_list('month','num')
    return locals()

猜你喜欢

转载自www.cnblogs.com/shaozheng/p/12026124.html
bbs
今日推荐