
<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函数)
随机推荐
-
详解Linux内核红黑树算法的实现
转自:https://blog.****.net/npy_lp/article/details/7420689 内核源码:linux-2.6.38.8.tar.bz2 关于二叉查找树的概念请参考博文& ...
-
2016vijos 1-2 股神小L(堆)
维护前i天的最优解,那么在后面可能会对前面几天的买卖情况进行调整 如果前面买入,买入的这个在后面一定不会卖出 如果前面卖出,卖出的这个可能会在后面变成买入,因为买这个,卖后面的会获得更多的收益 用一个 ...
-
HDU 1050(搬椅子 数学)
题意是在一个有 400 个房间的走廊中搬动房间里的椅子,如果两次的路线重叠,就要分两次搬动,如果不重叠,就可以一次搬动. 开始的时候直接当成求线段重叠条数的题,发现这种思路完全是错的,比如 1 - 3 ...
-
c++进阶学习
以后可能要做c++开发了..记录要看的书和可能用的技术,让自己有个学习的方向... 1. 语言基础 2. 算法与数据结构基础 3. 多线程开发基础 4. 数据库 5. 网络编程 6. 内存数据库技 ...
-
064、Weave网络结构分析(2019-04-04 周四)
参考https://www.cnblogs.com/CloudMan6/p/7482035.html Weave网络使用之前需要执行 eval $(weave env) ,其作用是将后续的doc ...
-
Vector集合
Vector集合也是List接口的一个实现类,但是它是同步的,这就意味着是单线程的,速度比较慢,被ArrayList集合所取代了(PS:为什么我现在也还不知道,先记录了)
-
JS判断是电脑浏览器还是手机端浏览器,并根据不同的终端跳转到不同的网址
<!DOCTYPE html> <html> <script> function browserRedirect() { var sUserAgent = navi ...
-
HTML 实例学习(基础)
1.HTML <html> 标签 注意:对于中文网页需要使用 <meta charset="utf-8"> 声明编码,否则会出现乱码.有些浏览器会设置 GB ...
-
Hibernate使用套路,新手请进
package cn.zhaoqinrong.MainApp; import org.apache.log4j.Logger; import org.hibernate.HibernateExcept ...
-
php制作圆形用户头像——自定义封装类源代码
思路 使用图层的方法设计,共需要创建3个图像层 1.底层:最后生成的图像 2.真实用户头像:作为中间层,用户上传的真实头像图片 3.圆形蒙版:作为最上层,在蒙版中绘制圆形,并设置为透明 如图: 代码如 ...