bootstrap mysql源码_Django+Bootstrap+Mysql 搭建个人博客 (六)

6.1.comments插件

(1)安装

pip install django-contrib-comments

(02)settings

INSTALLED_APPS =['django.contrib.sites','django_comments',

]

SITE_ID =1

44850de9f2c78bd731ed04d3d470d888.png

(3)website/url

url(r'^comments/', include('django_comments.urls')),

(4)修改源码

django_comments/abstracts.py第36行

原代码

site = models.ForeignKey(Site, on_delete=models.CASCADE)

修改后

site = models.ForeignKey(Site,default=None,blank=True,null=True,on_delete=models.CASCADE)

(5)修改源码

django_comments/abstracts.py第52行

修改和增加了几个字段

classCommentAbstractModel(BaseCommentAbstractModel):"""A user comment about some object."""

#Who posted this comment? If ``user`` is set then it was an authenticated

#user; otherwise at least user_name should have been set and the comment

#was posted by a non-authenticated user.

user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=_('user'),

blank=True, null=True, related_name="%(class)s_comments",

on_delete=models.SET_NULL)#Explicit `max_length` to apply both to Django 1.7 and 1.8+.

user_email = models.EmailField(_("user's email address"), max_length=254,

blank=True,null=True,default='xxx@xxx.com')

user_url= models.URLField(_("user's URL"), blank=True,null=True,default='https://xxx.xxx.xxx.xxx')

user_name= models.CharField(_("user's name"), max_length=50, blank=True)

user_img= models.ImageField(upload_to="user_images", blank=True,null=True,verbose_name="用户图像")

comment_title= models.CharField(max_length=256,default="无标题", blank=True,null=True,verbose_name="评论标题")

parent_comment= models.ForeignKey('self',default=None, blank=True,null=True,related_name="child_comment",on_delete=models.CASCADE)

level = models.PositiveIntegerField(default=0, blank=True,null=True,verbose_name='评论层级') comment= models.TextField(_('comment'), max_length=COMMENT_MAX_LENGTH)

.

.

.

.

(6)修改源码

django_comments/admin.py第29和37行

_('Content'),

{'fields': ('user', 'user_name', 'user_email', 'user_url', 'comment','comment_title','parent_comment')}

list_display = ('comment_title','name', 'content_type', 'object_pk', 'ip_address', 'submit_date', 'is_public', 'is_removed')

(7)修改源码

django_comments/forms.py第97行表单

class CommentDetailsForm(CommentSecurityForm):"""

Handles the specific details of the comment (name, comment, etc.)."""

#name = forms.CharField(label=pgettext_lazy("Person name", "Name"), max_length=50)

#email = forms.EmailField(label=_("Email address"))

#url = forms.URLField(label=_("URL"), required=False)

#Translators: 'Comment' is a noun here.

comment = forms.CharField(label=_('Comment'), widget=forms.Textarea,

max_length=COMMENT_MAX_LENGTH)

comment_title= forms.CharField(max_length=256,label=_('标题'))

parent_id= forms.IntegerField(min_value=-1,label=_('父评论的id'))

level= forms.IntegerField(min_value=0,label=_('层级'),)

.

.

.def get_comment_create_data(self, site_id=None):"""Returns the dict of data to be used to create a comment. Subclasses in

custom comment apps that override get_comment_model can override this

method to add extra fields onto a custom comment model."""parent_id= self.cleaned_data['parent_id']if parent_id <=0:

parent=None

_level= self.cleaned_data['level']else:

parent= get_model().objects.get(id=parent_id)

_level= self.cleaned_data['level'] + 4 #4是缩进

returndict(

content_type=ContentType.objects.get_for_model(self.target_object),

object_pk=force_text(self.target_object._get_pk_val()),#user_name=self.cleaned_data["name"],

#user_email=self.cleaned_data["email"],

#user_url=self.cleaned_data["url"],

comment_title = self.cleaned_data['comment_title'],

parent_comment=parent,

level=_level,

comment=self.cleaned_data["comment"],

submit_date=timezone.now(),

site_id=site_id or getattr(settings, "SITE_ID", None),

is_public=True,

is_removed=False,

)

(8)修改源码

django_comments/views/comments.py第97行表单

52行

#添加

if not request.session.get('login', None) and notuser_is_authenticated:return redirect("/")

116行

#if user_is_authenticated:

#comment.user = request.user

#添加

if request.session.get('login',None):

comment.user_name= request.session['screen_name']

comment.user_img= request.session['profile_image_url']

以上都修改完后

python manage.py makemigtations

python manage.py migrate

6.2.评论表单

detail.html


{% get_comment_form for entry as form %}

{% get_comment_count for entry as comment_count %}

评论总数: {{ comment_count }}


{% csrf_token %}

评论标题:

评论内容:

{{ form.honeypot }}{{ form.content_type }}

{{ form.object_pk }}

{{ form.timestamp }}

{{ form.security_hash }}

  重置

  评论

效果:

f43009838e2140d1e43140e1d334ec1f.png

现在测试评论,可以添加成功,但是还不能显示

6.3.显示评论

(1)views.py

from django_comments.models importCommentdefdetail(request,blog_id):#entry = models.Entry.objects.get(id=blog_id)

entry = get_object_or_404(models.Entry,id=blog_id)

md= markdown.Markdown(extensions=['markdown.extensions.extra','markdown.extensions.codehilite','markdown.extensions.toc',

])

entry.body=md.convert(entry.body)

entry.toc=md.toc

entry.increase_visiting()

comment_list=list()defget_comment_list(comments):for comment incomments:

comment_list.append(comment)

children=comment.child_comment.all()if len(children) >0:

get_comment_list(children)

top_comments= Comment.objects.filter(object_pk=blog_id, parent_comment=None,

content_type__app_label='blog').order_by('-submit_date')

get_comment_list(top_comments)return render(request, 'blog/detail.html', locals())

(2)detail.html


{% get_comment_form for entry as form %}

{% get_comment_count for entry as comment_count %}

评论总数: {{ comment_count }}


{# 评论表单#}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/526341.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 查看索引 命令_MySQL命令篇之库、表、索引、用户、视图及SELECT查询

大纲一、库管理二、表管理三、索引管理四、用户管理五、视图管理六、SELECT查询一、库管理(1)、创建数据库CREATE DATABASE db_name [CHARACTER SET [] charset_name] [COLLATE [] collation_name];mysql> CREATE DATABASE IF NOT EXISTS testdb CHARACTER SET gbk COLLATE …

mysql 数据修改记录日志_mysql对数据的更新操作记录在哪个日志中?

mysql对数据的更新操作记录在通用查询日志和二进制日志中。通用查询日志用来记录用户的所有操作&#xff0c;包括启动和关闭 MySQL 服务、更新语句和查询语句等&#xff1b;二进制日志会以二进制的形式记录数据库的各种操作&#xff0c;但不记录查询语句。(推荐教程&#xff1a…

mysql insert 二进制_MYSQL 插入二进制数的 2 种方法。

方法 1、insert into TableName set column ;方法 2、insert into TableName .... values(.....);------------------------------------------------------------------------------------------------------------------------------------------create table T(x bit(8));方…

mysql怎么分组查询所有数据库_Mysql-4 分组查询与子查询

1、查询结果的分组操作a、分组允许把数据分为多个组&#xff0c;以便能对每个组进行聚集计算b、分组是在select语句的group by 子句中建立的注意&#xff1a;group by 只是创建分组&#xff0c;但并不保证分组里面的数据的排列顺序&#xff0c;需要使用order by 子句对分组里面…

mysql update upper_MySQL数据处理函数upper、abs、date

1. 数据处理函数文本处理函数upper()转换大写函数SQL> select vend_name, upper(vend_name) as vend_name_upcase from vendors order by vend_name;soundex()发音类似函数SQL> select cust_name, cust_contact from customers where cust_contact Y. Lie;SQL> selec…

java 获取类方法_Java之反射机制三:获取类的方法

一.实体类BigDog.javapackage reflex;public class BigDog extends Dog {private Integer age;public String name;public BigDog(){}private void getDog(){}private BigDog(Integer age, String name) {this.age age;this.name name;}public String getName() {return name…

java语言50到100之间素数和_用JAVA语言编写一程序,求100以内的所有素数

满意答案fdewj5902017.02.13采纳率&#xff1a;40% 等级&#xff1a;9已帮助&#xff1a;316人12345678910111213141516171819public static void main(String[] args) { for (int i 2; i < 100; i) { int temp (int) Math.sqrt(i); …

java矩阵面积_Java基础 矩阵面积

提供 数据结构与算法题目 的平台是LintCode&#xff0c;参考链接是&#xff1a;http://www.lintcode.com/zh-cn/问题描述&#xff1a;参考代码&#xff1a;public class Rectangle {/** Define two public attributes width and height of type int.*/// write your code herep…

java判断线程是否wait_Java并发编程之线程间通讯(上)wait/notify机制

线程间通信如果一个线程从头到尾执行完也不和别的线程打交道的话&#xff0c;那就不会有各种安全性问题了。但是协作越来越成为社会发展的大势&#xff0c;一个大任务拆成若干个小任务之后&#xff0c;各个小任务之间可能也需要相互协作最终才能执行完整个大任务。所以各个线程…

python土味情话_Python 将土味情话语录设置为桌面壁纸

本文编写于 128 天前&#xff0c;最后修改于 128 天前&#xff0c;其中某些信息可能已经过时。41041-3yfokd0irbe.png38220-tlrmwji3zwo.pngimport osimport tempfileimport timeimport requestsimport win32apiimport win32conimport win32guifrom PIL import Image, ImageDra…

Day70力扣打卡

打卡记录 收集足够苹果的最小花园周长&#xff08;找规律 二分&#xff09; 链接 class Solution:def minimumPerimeter(self, neededApples: int) -> int:l, r 1, 10 ** 5while l < r:mid (l r) >> 1if 2 * (2 * (mid ** 3) 3 * (mid ** 2) mid) > nee…

java计数器策略模式_java设计模式(二十一)--策略模式

对于策略模式,我在很多面试题上看到过考察这一类的问题,这种模式也的确比较好用。 我感觉这种模式就是将不同实现的方法放到一个接口中,然后通过实现这个接口来实现不同的运行结果,这种模式有三部分构成: 策略接口 策略实现类 策略作用类(使用策略的类) 网络上的专业解释:此模式…

linux setuid函数_setuid函数解析

在讨论这个setuid函数之前&#xff0c;我们首先要了解的一个东西就是内核为每个进程维护的三个UID值。这三个UID分别是实际用户ID(real uid)、有效用户ID(effective uid)、保存的设置用户ID(saved set-user-ID)。首先说这个实际用户ID&#xff0c;就是我们当前以哪个用户登录了…

java中asl_带你认识绕不开的ASLR

微软从windows vista/windows server 2008(kernel version 6.0)开始采用ASLR技术&#xff0c;主要目的是为了防止缓冲区溢出ASLR技术会使PE文件每次加载到内存的起始地址随机变化&#xff0c;并且进程的栈和堆的起始地址也会随机改变。ASLR(Address space layout randomization…

Java 捕获 mybatis异常_3 springboot集成mybatis和全局异常捕获

mybatis有两种方式&#xff0c;一种是基于XML&#xff0c;一种是基于注解springboot集成mybatis首先先创建表&#xff0c;这里都简化了DROP TABLE IF EXISTS user;CREATE TABLE user (id int(11) NOT NULL auto_increment,username varchar(255) default NULL,PRIMARY KEY (id)…

java applet 访问文件_使用JavaApplet访问数据库

使用Java Applet访问数据库学习任何的程序语言&#xff0c;当然都得与数据库&#xff0c;Java刚刚诞生的时候&#xff0c;对数据库的支持并不是很好&#xff0c;经过这几年的发展&#xff0c;它对数据库的支持也已经完全达到了成熟的境地。由于这里主要是介绍Java Applet小程序…

与java线程有关的,线程多少和什么有关?大神们表示有话要说!

原标题&#xff1a;线程多少和什么有关&#xff1f;大神们表示有话要说&#xff01;来源&#xff1a;importnew.com/10780.htmlEddie的回答:Charlie Martin的回答:benjismith的回答:Neil Coffey的回答:McGovernTheory在StackOverflow提了这样一个问题:Java虚拟机最多支持多少个…

java 项目 人力资源项目,基于jsp的人力资源系统-JavaEE实现人力资源系统 - java项目源码...

基于jspservletpojomysql实现一个javaee/javaweb的人力资源系统, 该项目可用各类java课程设计大作业中, 人力资源系统的系统架构分为前后台两部分, 最终实现在线上进行人力资源系统各项功能,实现了诸如用户管理, 登录注册, 权限管理等功能, 并实现对各类人力资源系统相关的实体…

matlab最佳拟合的指标是什么意思,Matlab拟合好坏常用指标

Matlab拟合好坏常用指标用过Matlab的拟合、优化和统计等工具箱的网友&#xff0c;会经常遇到下面几个名词&#xff1a;SSE(和方差、误差平方和)&#xff1a;The sum of squares due to errorMSE(均方差、方差)&#xff1a;Mean squared errorRMSE(均方根、标准差)&#xff1a;R…

matlab数字图像处理函数,MATLAB数字图像处理学习(二)|常用函数

以下的学习整理来自《数字图像处理原理与实践(MATLAB版)》im2bw功能&#xff1a;将索引图象、灰度图像和RGB彩色图像转换为二值图像 调用形式&#xff1a; >BW im2bw(I,level) BW im2bw(X,cmap,level) BW im2bw(RGB,level)其中level用于设置阈值。level取值范围[0, 1]。 …