<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函数)

随机推荐

  1. typdef void(*fun)(void)笔记【函数指针/typdef函数指针】

    1. 函数指针:返回类型(*函数名)(参数表) 2. 使用typdef void(*fun)(void) typedef的功能是定义新的类型.第一句就是定义了一个MyFun的类型,并定义这种类型为 指 ...

  2. 063、如何使用weave网络(2019-04-03 周三)

    参考https://www.cnblogs.com/CloudMan6/p/7471162.html   weave是Weaveworks开发的容器网络解决方案.weave创建的虚拟网络可以将部署在多 ...

  3. 062、如何使用flannel host-gw backend(2019-04-02 周二)

    参考https://www.cnblogs.com/CloudMan6/p/7457653.html   flannel 支持多种backend,前面学习的是 vxlan backend ,host- ...

  4. 01.Redis 初体验

    0. Redis安装 官网下载Redis 解压缩 make make install 安装后的执行命令被保存在了/usr/local/bin目录下 1. 配置文件:redis.conf daemoni ...

  5. tcp_listen函数

    #include <netdb.h> #include <unistd.h> #include <stddef.h> #include <strings.h& ...

  6. jQuery two way bindings(双向数据绑定插件)

    jQuery two way bindings https://github.com/petersirka/jquery.bindings 这是一个简单的jQuery双向绑定库. 此插件将HTML元素 ...

  7. 【bzoj 3669】[Noi2014]魔法森林

    Description 为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士.魔法森林可以被看成一个包含个N节点M条边的无向图,节点标号为1..N,边标号为1..M.初始时小E同学在号节 ...

  8. [C++]3-1 得分(Score ACM-ICPC Seoul 2005,UVa1585)

    Question 习题3-1 得分(Score ACM-ICPC Seoul 2005,UVa1585) 题目:给出一个由O和X组成的串(长度为1~80),统计得分. 每个O的分数为目前连续出现的O的 ...

  9. [C++]动态规划系列之Warshall算法

    /** * * @author Zen Johnny * @date 2018年3月31日 下午8:13:09 * */ package freeTest; /* [动态规划系列:Warshall算法 ...

  10. redis集群学习

    转载: http://arganzheng.life/redis-cluster.html Redis3.0版本加入了cluster功能,解决了Redis单点无法横向扩展的问题. 分布式系统要解决的不 ...