$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函数)
随机推荐
- IP简介(一)
1. OSI模型 TCP是TCP/IP的第三层传输层,对应OSI的第四层传输层: IP是TCP/IP的第二层互联层,对应OSI的第三层网络层. TCP属于OSI中的运输层它是面向连接的协议: IP属于 ...
- python模块之collections random
collections 在内置数据类型(list, dict, tuple, set)的基础上,collections提供了几个额外的数据类型: Counter, deque, Orderdict, ...
- [转载]SpringMVC解决跨域问题
本文转载自 https://www.cnblogs.com/morethink/p/6525216.html SpringMVC解决跨域问题, 感谢作者! 有个朋友在写扇贝插件的时候遇到了跨域问题. ...
- HanLP中人名识别分析
HanLP中人名识别分析 在看源码之前,先看几遍论文<基于角色标注的中国人名自动识别研究> 关于命名识别的一些问题,可参考下列一些issue: 名字识别的问题 #387 机构名识别错误 关 ...
- springboot(十九):SpringBoot+EHcache实现缓存
https://blog.csdn.net/qq_28143647/article/details/79789368
- 一次针对多台服务器交互式主机命令采集Python脚本编写
[环境介绍] 系统环境:Linux + Python 2.7.10(监控主机) [背景描述] 需求:每次节假日或者重要时间时,需要对数据库主机信息进行检查,比如主机空间使用率之类.有时候需要执 ...
- JS算法练习三
JS算法练习 1.生成一个长度为10的随机数组,使用冒泡法给数组排序 var arr=new Array(10); for (var i = 0; i <arr.length ; i++) { ...
- python 之 configparser 模块
[root@linag python]# vim config.py import configparser config = configparser.ConfigParser() config[' ...
- Flume思维导图
- python面向对象--私有和继承
一. 私有属性和私有方法 应用场景 在实际开发中,对象的某些属性或方法可能只希望在对象的内部使用,而不希望在外部被访问到 私有属性 就是 对象 不希望公开的属性 (属性即类里面的变量) 私有方法 就是 ...