Django小项目简单BBS论坛

开发一个简单的BBS论坛

项目需求:

复制代码
1 整体参考“抽屉新热榜” + “虎嗅网”
2 实现不同论坛版块
3 帖子列表展示
4 帖子评论数、点赞数展示
5 在线用户展示
6 允许登录用户发贴、评论、点赞
7 允许上传文件
8 帖子可被置顶
9 可进行多级评论
复制代码

知识必备:(注:没有必备下面知识的同学,请返回去看会之后再看下面的内容防止蒙了~~!

1 Django
2 HTML\CSS\JS
3 BootStrap
4 Jquery

设计表结构

1、表结构重要性

在开发任何项目的时候,设计到数据库,第一个事情要做的是设计表结构。表结构设计不好就不要写代码,表结构是体现了你业务逻辑关系的。你的数据都要往数据库里存,其实表结构你要理清了你的架构也就出来了!

2、设计表

 

复制代码
#!/usr/bin/env python
#-*- coding:utf-8 -*-from __future__ import unicode_literals
from django.db import models
from django.contrib.auth.models import User# Create your models here.class Article(models.Model):'''帖子表'''#标题最大长度255,不能重名title = models.CharField(u'文章标题',max_length=255,unique=True)#发布办款-使用外键关联Categorycategory = models.ForeignKey("Category",verbose_name='板块名称')'''这里在admin中,title默认是显示英文的,我们可以在他的最前面加要给字段,在admin中就可以显示中文,他和verbose_name一样,什么时候必须使用verbose_name呢?比如上面的{category = models.ForeignKey("Category",verbose_name='板块名称')} 这个字段第一个字段是关联的类,这里就必须使用verbose_name'''#上传文件head_img = models.ImageField(upload_to="uploads")#文章内容(文章内容可能有很多,所以我们就不用"CharField"来写了,我们用TextField,不用规定他多长了,为可扩展长度)content = models.TextField(u"内容")#文章作者author = models.ForeignKey("UserProfile",verbose_name="作者")#发布日期publish_date = models.DateTimeField(auto_now=True,verbose_name="发布日期")#是否隐藏hidden = models.BooleanField(default=False,verbose_name="是否隐藏")#帖子的优先级priority = models.IntegerField(default=1000,verbose_name="优先级")def __unicode__(self):return "<%s,author:%s>" % (self.title,self.author)class Comment(models.Model):'''评论表'''#评论是基于文章的,并且一条评论只属于一个文章!对多的关系#一个文章可以有多个评论,一个评论只属于一个文章#评论文章article = models.ForeignKey("Article")#评论用户user = models.ForeignKey("UserProfile")#评论内容comment = models.TextField(max_length=1000)#评论时间date = models.DateTimeField(auto_now=True)#多级评论,是不是评论评论的当前的表(自己表),所以就得和自己做一个关联!#这里在关联自己的时候必须设置一个related_name否则会报错冲突#这里parent_comment,必须设置为可以为空,因为如果他是第一评论他是没有父ID的parent_comment = models.ForeignKey("self",related_name='p_comment',blank=True,null=True)'''prent selfNull    11       21       32       4通过上面的这种方法来记录,评论的级别关系!'''def __unicode__(self):return "<user:%s>" %(self.user)
class ThumbUp(models.Model):'''点赞'''#给那个文章点的article = models.ForeignKey('Article')#用户名user = models.ForeignKey('UserProfile')#时间date = models.DateTimeField(auto_now=True)class Category(models.Model):'''板块表'''#板块名称name = models.CharField(max_length=64,unique=True,verbose_name="板块名称")#板块管理员admin = models.ManyToManyField("UserProfile",verbose_name="模块管理员")def __unicode__(self):return self.nameclass UserProfile(models.Model):'''用户表'''#使用Django提供的用户表,直接继承就可以了.在原生的User表里扩展!(原生的User表里就有用户名和密码)#一定要使用OneToOne,如果是正常的ForeignKey的话就表示User中的记录可以对应UserProfile中的多条记录!#并且OneToOne的实现不是在SQL级别实现的而是在代码基本实现的!user = models.OneToOneField(User)#名字name = models.CharField(max_length=32)#属组groups = models.ManyToManyField("UserGroup")def __unicode__(self):return self.nameclass UserGroup(models.Model):'''用户组表'''name = models.CharField(max_length=64,unique=True)def __unicode__(self):return self.name
复制代码

 

配置Django Admin

配置admin注册model,不要忘记创建Django 管理员用户

复制代码
from django.contrib import admin
import models
# Register your models here.
admin.site.register(models.Article)
admin.site.register(models.Category)
admin.site.register(models.Comment)
admin.site.register(models.ThumbUp)
admin.site.register(models.UserProfile)
admin.site.register(models.UserGroup)
复制代码

我创建了几个板块,我在板块中查看的时候。只能看到下面简单的信息:

这里我想看到板块中的ID或其他信息怎么办?

复制代码
#!/usr/bin/env python
#-*- coding:utf-8 -*-from django.contrib import admin
import models
# Register your models here.#给某个表专门的定制的类class CategoryAdmin(admin.ModelAdmin):list_display = ('id','name')class ArticleAdmin(admin.ModelAdmin):list_display = ('id','title','author','hidden','publish_date')admin.site.register(models.Article,ArticleAdmin) #把自定义的类绑定到注册的类中
admin.site.register(models.Category,CategoryAdmin)  #把自定义的类绑定到注册的类中admin.site.register(models.Comment)
admin.site.register(models.ThumbUp)
admin.site.register(models.UserProfile)
admin.site.register(models.UserGroup)
复制代码

效果如下:

前端页面&URLorViews配置

1、url别名使用

url里配置别名

url(r'^category/(\d+)/$',views.category,name='category'),

html里配置的时候就只认那个别名了

          <li role="presentation"><a href="{% url 'category' 1 %}">欧美专区</a></li><li role="presentation"><a href="{% url 'category' 2 %}">日韩专区</a></li><li role="presentation"><a href="{% url 'category' 3 %}">印度专区</a></li>

别名的好处:如果说那天想修改url里的这个url名称了,是不是所有前端都得修改!并且在有好几层的时候怎么改使用别名就会非常方便了!

2、前端页面写完之后发现图片无法正常显示

出现这个问题的原因:他能找到uploads这个目录吗?他能直接访问这个目录吗?他不能直接访问不了!

  • 一个是在Linux环境下做一个软连接连接过去

如果在settings里加入uploads这个目录,但是这个方法还是有问题!他会去找/static/uploads/uploads目录,看下面的图!

但是通过下面的方式就可以访问(原因就是因为:他去/static/uploads/uploads目录找了)

2.2、我们自己写上传的方法

 定义form表单认证

复制代码
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# Tim Luo  LuoTianShuaifrom django import formsclass ArticleForm(forms.Form):title = forms.CharField(max_length=255,min_length=5)summary = forms.CharField(max_length=255,min_length=5)head_img = forms.ImageField()content = forms.CharField(min_length=10)category_id = forms.IntegerField()
复制代码

定义上传方法

复制代码
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# Tim Luo  LuoTianShuaiimport osdef handle_upload_file(f,request):  #f这里获取到文件句柄base_img_upload_path = 'static/Uploads'user_path = "%s/%s" % (base_img_upload_path,request.user.userprofile.id)if not os.path.exists(user_path):os.mkdir(user_path)with open('%s/%s'% (user_path,f.name),'wb+') as destinations:for chunk in f.chunks():destinations.write(chunk)#为了防止用户传送图片进行冲突,我们为每个用户进行创建用户return "/static/Uploads/%s/%s" % (request.user.userprofile.id,f.name)
复制代码

定义views

复制代码
def new_article(request):category_list = models.Category.objects.all()if request.method == 'POST':form = ArticleForm(request.POST,request.FILES)if form.is_valid():form_data = form.cleaned_dataform_data['author_id'] = request.user.userprofile.id#自定义图片上传new_img_path = handle_upload_file(request.FILES['head_img'],request)#但是在views也保存了一份,我们给他改掉改成我们自己的就行了form_data['head_img'] = new_img_path#create只能返回成功失败,我想在创建完成之后返回文章的ID,直接下面那么写就可以print form_datanew_article_obj = models.Article(**form_data)new_article_obj.save()#这个对象就直接返回了return render(request,'new_article.html',{'new_article_obj':new_article_obj}) #如果没有这个变量说明是创建新文章呢else:print form.errorsreturn render(request,'new_article.html',{'category_list':category_list})
复制代码

 

 

 

多级评论实现

用户可以直接对贴子进行评论,其它用户也可以对别的用户的评论再进行评论,也就是所谓的垒楼,如下图:

所有的评论都存在一张表中, 评论与评论之前又有从属关系,如何在前端 页面上把这种层级关系体现出来?

首先咱们在存储数据的时候是怎么来实现记录层级关系的呢?(下面的图是经过简化的把其他列隐藏了)

我们在上面创建数据库表结构的时候,就定义了一个外键为他们自己(parent_comment_id),如果他没有父级别的ID说明他们是第一层,如果有说明他包含在一个评论之内!(仔细看上面的表结构)

先把评论简化成一个这样的模型:

复制代码
data = [(None,'A'),('A','A1'),('A','A1-1'),('A1','A2'),('A1-1','A2-3'),('A2-3','A3-4'),('A1','A2-2'),('A2','A3'),('A2-2','A3-3'),('A3','A4'),(None,'B'),('B','B1'),('B1','B2'),('B1','B2-2'),('B2','B3'),(None,'C'),('C','C1'),]
复制代码

转换为字典之后:

复制代码
data_dic = {'A': {'A1': {'A2':{'A3':{'A4':{}}},'A2-2':{'A3-3':{}}}},'B':{'B1':{'B2':{'B3':{}},'B2-2':{}}},'C':{'C1':{}}}
复制代码

看上面的字典,我们能通过for循来获取他有多少层吗?当然不行,我们不知道他有多少层就没有办法进行找,或者通过while循环,最好是用递归进行一层一层的查找

我们在前端展示的时候需要知道,那条数据是那一层的,不可能是垒下去的!因为他们是有层级关系的!

我们用后端来实现:咱们给前端返回一个字典这样是不行的,咱们在后端把层级关系建立起来~返回的时候直接返回一个完整的HTML

转换为字典之后就有层级关系了我们可以通过递归来实现了!上面再没有转换为字典的时候层级关系就不是很明确了!

 

在循环的过程中不断的创建字典,先建立最顶级的,然后在一层一层的建立

先通过一个简单的例子看下:

复制代码
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# Tim Luo  LuoTianShuaidata = [(None,'A'),('A','A1'),('A','A1-1'),('A1','A2'),('A1-1','A2-3'),('A2-3','A3-4'),('A1','A2-2'),('A2','A3'),('A2-2','A3-3'),('A3','A4'),(None,'B'),('B','B1'),('B1','B2'),('B1','B2-2'),('B2','B3'),(None,'C'),('C','C1'),]def tree_search(d_dic,parent,son):#一层一层找,先拨第一层,一层一层往下找for k,v in d_dic.items():#举例来说我先遇到A,我就把A来个深度查询,A没有了在找Bif k == parent:#如果等于就找到了parent,就吧son加入到他下面d_dic[k][son] = {} #son下面可能还有儿子#这里找到就直接return了,你找到就直接退出就行了returnelse:#如果没有找到,有可能还有更深的地方,的需要剥掉一层            tree_search(d_dic[k],parent,son)data_dic = {}for item in data:# 每一个item代表两个值一个父亲一个儿子parent,son = item#先判断parent是否为空,如果为空他就是顶级的,直接吧他加到data_dicif parent is None:data_dic[son] = {}  #这里如果为空,那么key就是他自己,他儿子就是一个空字典else:'''如果不为空他是谁的儿子呢?举例来说A3他是A2的儿子,但是你能直接判断A3的父亲是A2你能直接判断他是否在A里面吗?你只能到第一层.key所以咱们就得一层一层的找,我们知道A3他爹肯定在字典里了,所以就得一层一层的找,但是不能循环找,因为你不知道他有多少层,所以通过递归去找直到找到位置'''tree_search(data_dic,parent,son) #因为你要一层一层找,你的把data_dic传进去,还的把parent和son传进去for k,v in data_dic.items():print(k,v)
复制代码

执行结果:(完美)

('A', {'A1': {'A2': {'A3': {'A4': {}}}, 'A2-2': {'A3-3': {}}}, 'A1-1': {'A2-3': {'A3-4': {}}}})
('C', {'C1': {}})
('B', {'B1': {'B2-2': {}, 'B2': {'B3': {}}}})

 2、前端返回

当咱们把这个字典往前端返回的时候,前端模板里是没有一个语法递归的功能的,虽然咱们的层级关系已经出来了!所以咱们需要自定义一个模板语言然后拼成一个html然后返回给前端展示!

2.1、配置前端吧数据传给simple_tag

{% load custom_tags %}{% build_comment_tree article_obj.comment_set.select_related %}

2.2、simple_tag获取数据然后把用户穿过来的数据进行转换为字典

复制代码
#!/usr/bin/env python
# -*- coding:utf-8 -*-from django import template
from django.utils.safestring import mark_saferegister = template.Library()def tree_search(d_dic,comment_obj):#这里不用传附近和儿子了因为他是一个对象,可以直接找到父亲和儿子for k,v_dic in d_dic.items():if k == comment_obj.parent_comment:#如果找到了d_dic[k][comment_obj] = {} #如果找到父亲了,你的把自己存放在父亲下面,并把自己当做key,value为一个空字典returnelse:#如果找不到递归查找            tree_search(d_dic[k],comment_obj)@register.simple_tag
def build_comment_tree(comment_list):'''把评论传过来只是一个列表格式(如下),要把列别转换为字典,在把字典拼接为html[<Comment: <A,user:罗天帅>>, <Comment: <A2-1,user:罗天帅>>, <Comment: <A3-1,user:罗天帅>>, <Comment: <A2-2,user:罗天帅>>,<Comment: <A4-1,user:罗天帅>>, <Comment: <A4-2,user:罗天帅>>, <Comment: <A5-1,user:罗天帅>>, <Comment: <A3-2,user:罗天帅>>,<Comment: <B2,user:罗天帅>>, <Comment: <B2-1,user:罗天帅>>]:param comment_list::return:'''comment_dic = {}#print(comment_list)for comment_obj in comment_list: #每一个元素都是一个对象if comment_obj.parent_comment is None: #如果没有父亲comment_dic[comment_obj] = {}else:#通过递归找            tree_search(comment_dic,comment_obj)# #测试:# for k,v in comment_dic.items():#     print(k,v)# 上面完成之后开始递归拼接字符串
复制代码

2、3生成html标签

复制代码
#!/usr/bin/env python
# -*- coding:utf-8 -*-from django import template
from django.utils.safestring import mark_saferegister = template.Library()def tree_search(d_dic,comment_obj):#这里不用传附近和儿子了因为他是一个对象,可以直接找到父亲和儿子for k,v_dic in d_dic.items():if k == comment_obj.parent_comment:#如果找到了d_dic[k][comment_obj] = {} #如果找到父亲了,你的把自己存放在父亲下面,并把自己当做key,value为一个空字典returnelse:#如果找不到递归查找            tree_search(d_dic[k],comment_obj)def generate_comment_html(sub_comment_dic):#先创建一个html默认为空html = ""for k,v_dic in sub_comment_dic.items():#循环穿过来的字典html += "<div  class='comment-node'>"  + k.comment + "</div>"#上面的只是把第一层加了他可能还有儿子,所以通过递归继续加if v_dic:html += generate_comment_html(v_dic)return html@register.simple_tag
def build_comment_tree(comment_list):'''把评论传过来只是一个列表格式(如下),要把列别转换为字典,在把字典拼接为html[<Comment: <A,user:罗天帅>>, <Comment: <A2-1,user:罗天帅>>, <Comment: <A3-1,user:罗天帅>>, <Comment: <A2-2,user:罗天帅>>,<Comment: <A4-1,user:罗天帅>>, <Comment: <A4-2,user:罗天帅>>, <Comment: <A5-1,user:罗天帅>>, <Comment: <A3-2,user:罗天帅>>,<Comment: <B2,user:罗天帅>>, <Comment: <B2-1,user:罗天帅>>]:param comment_list::return:'''comment_dic = {}#print(comment_list)for comment_obj in comment_list: #每一个元素都是一个对象if comment_obj.parent_comment is None: #如果没有父亲comment_dic[comment_obj] = {}else:#通过递归找            tree_search(comment_dic,comment_obj)# #测试:# for k,v in comment_dic.items():#     print(k,v)# 上面完成之后开始递归拼接字符串#div框架html = "<div class='comment-box'>"margin_left = 0for k,v in comment_dic.items():#第一层的htmlhtml += "<div class='comment-node'>" + k.comment + "</div>"#通过递归把他儿子加上html += generate_comment_html(v)html += "</div>"return mark_safe(html)
复制代码

效果如下:

2.4、上面的看起来不是很好看怎么办?给他增加一个margin-left让他来显示层级效果,每次进行递归的时候给他加一个值!

复制代码
#!/usr/bin/env python
# -*- coding:utf-8 -*-from django import template
from django.utils.safestring import mark_saferegister = template.Library()def tree_search(d_dic,comment_obj):#这里不用传附近和儿子了因为他是一个对象,可以直接找到父亲和儿子for k,v_dic in d_dic.items():if k == comment_obj.parent_comment:#如果找到了d_dic[k][comment_obj] = {} #如果找到父亲了,你的把自己存放在父亲下面,并把自己当做key,value为一个空字典returnelse:#如果找不到递归查找            tree_search(d_dic[k],comment_obj)def generate_comment_html(sub_comment_dic,margin_left_val):#先创建一个html默认为空html = ""for k,v_dic in sub_comment_dic.items():#循环穿过来的字典html += "<div style='margin-left:%spx'  class='comment-node'>" % margin_left_val + k.comment + "</div>"#上面的只是把第一层加了他可能还有儿子,所以通过递归继续加if v_dic:html += generate_comment_html(v_dic,margin_left_val+15)return html@register.simple_tag
def build_comment_tree(comment_list):'''把评论传过来只是一个列表格式(如下),要把列别转换为字典,在把字典拼接为html[<Comment: <A,user:罗天帅>>, <Comment: <A2-1,user:罗天帅>>, <Comment: <A3-1,user:罗天帅>>, <Comment: <A2-2,user:罗天帅>>,<Comment: <A4-1,user:罗天帅>>, <Comment: <A4-2,user:罗天帅>>, <Comment: <A5-1,user:罗天帅>>, <Comment: <A3-2,user:罗天帅>>,<Comment: <B2,user:罗天帅>>, <Comment: <B2-1,user:罗天帅>>]:param comment_list::return:'''comment_dic = {}#print(comment_list)for comment_obj in comment_list: #每一个元素都是一个对象if comment_obj.parent_comment is None: #如果没有父亲comment_dic[comment_obj] = {}else:#通过递归找            tree_search(comment_dic,comment_obj)# #测试:# for k,v in comment_dic.items():#     print(k,v)# 上面完成之后开始递归拼接字符串#div框架html = "<div class='comment-box'>"margin_left = 0for k,v in comment_dic.items():#第一层的htmlhtml += "<div class='comment-node'>" + k.comment + "</div>"#通过递归把他儿子加上html += generate_comment_html(v,margin_left+15)html += "</div>"return mark_safe(html)
复制代码

效果如下:



来源: http://www.cnblogs.com/luotianshuai/p/5331982.html


来自为知笔记(Wiz)


转载于:https://www.cnblogs.com/bruceg/p/5572687.html

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

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

相关文章

时间转年月日_编程中常见的时间格式

时间格式前端和后端时经常会遇到各种各样的时间格式&#xff0c;这些格式在编写程序的时候都需要去使用不同的处理方式&#xff0c;这里集中写一下。先说一下各种不同的时间格式。类型名格式说明ISO 8601一般&#xff1a;2020-12-05T05:33:19Z 东八区&#xff1a;2004-05-03T17…

外星人台式机无盘服务器,可以拎走的“台式机” Alienware Area-51m评测

Alienware外星人这个品牌曾经一度是游戏笔记本领域的执牛耳者&#xff0c;自从1996年创立以来&#xff0c;品牌宗旨就是提供最强的PC性能&#xff0c;最有个性的设计和最好的服务。凭借着强悍的配置、创新的黑科技和酷炫的灯效&#xff0c;其一度是业内高端和高品质的代名词。但…

法流程图_世界五大学习方法之西蒙学习法

世界五大学习方法之西蒙学习法摘要&#xff1a;西蒙学习法为6个月可以掌握任何一门学问&#xff0c;它的本质是广义动量定理。广义动量定理通过调整力量、方向、作用点和时间来增加成果。西蒙学习法使用了降低问题难度方法中的一种&#xff1a;拆分。本节分为四个部分&#xff…

生成word_Word如何生成目录?3个步骤轻松掌握!

在使用Word编写长篇文档时&#xff0c;我们经常会给内容生成一个目录&#xff0c;有了目录&#xff0c;无论是阅读还是查找内容&#xff0c;都非常方便。Word生成目录是一项核心功能&#xff0c;这是每个使用Word的人&#xff0c;必须要掌握的一项技巧。如果你还不会这项技巧&a…

启动go服务_内网穿透工具 FRP公网服务端、内网客户端快速配置文件说明

内网穿透工具 FRP 公网服务端、内网客户端 frps.ini 、frpc.ini 配置文件常用设置展示及说明公网服务端 frps.ini 配置文件常用设置公网服务端配置文件&#xff1a;frps.ini[common]bind_port 7000# vhost_http_port 参数来设置 HTTP 访问端口&#xff0c;此处示例&#xff1a…

设置dns_2019让你的网速飞起来,你需要……设置正确DNS服务篇

有时候上网明明网络连接正常&#xff0c;但网页访问却很慢&#xff1f;平时会不会经常听到一些老司机说&#xff0c;网络很慢啊可以修改一下DNS啊&#xff01;什么是DNS&#xff1f;又为什么会对网速产生影响呢&#xff1f;跟着小编的教程一起来学习一下吧~PART 1 什么是DNS&am…

5 随窗口改变大小_C4D默认界面两个关于坐标轴的窗口有什么区别

前言在一开始学习C4D的时候&#xff0c;就有这个疑问&#xff0c;为什么明明物体的属性都有了一个坐标属性的窗口了&#xff0c;还要有一个和坐标相关的窗口在默认的界面呢&#xff0c;后边在使用的过程中才慢慢理解了额外的坐标管理器窗口的作用&#xff0c;这一篇文章我们来看…

MySQL数据查询新人须知

MySQL 是一个开放源码的小型关系型数据库管理系统。 针对不同的用户&#xff0c;MySQL 一共分为两个不同的版本&#xff1a; MySQL Community Server&#xff08;社区版服务器&#xff09;。 MySQL Enterprise Server&#xff08;企业版服务器&#xff09;。 目前 Internet …

(硬 核)Navicat for MySQL 介 绍( 入 门 须 知 )

Navicat for MySQL 是一款流行的 MySQL 图形化管理工具以下是 Navicat for MySQL 工作界面使用 Navicat for MySQL 连接 MySQL 服务器鼠标左键单击“连接”按钮&#xff0c;出现“新建连接”窗口。分别输入连接名、MySQL 服务器主机地址、服务 端口号、用户名和密码&#xff0c…

小明一家过桥_【练习】用python解决小明一家过桥问题

import randomlist1[] #存放所有遍历的结果#等待过桥的人员bridge1{小明:1,弟弟:3,爸爸:6,妈妈:8,爷爷:12}#过桥后的人员bridge2{}#判断未过桥的人是否空了(全部过完后&#xff0c;程序停止&#xff0c;看总共用了多长时间)len1len(bridge1)print(len1)#while True:print(初始情…

WGZX:javaScript 学习心得--1

标签&#xff1a; javascriptiframedreamweaver浏览器htmltable2008-09-11 10:50 1071人阅读 评论(0) 收藏 举报分类&#xff1a;UI&#xff08;21&#xff09; 1&#xff0c;document.getElementById方法只能获取到一个对象&#xff0c;即使有多个同名的对象&#xff0c;也只取…

PHP----练习-----新闻管理----增删改查

练习-----新闻管理 题目要求如下&#xff1a; 做法&#xff1a; 【1】建数据库 【2】封装类文件--------DBDA.class.php 1 <?php2 class DBDA3 {4 public $fuwuqi"localhost"; //服务器地址5 public $yonghuming"root";//用户名6 public …

mysql query cache 关闭_为什么要关闭MySQL query cache-Fun言

MySQL的query cache大部分情况下其实只是鸡肋而已&#xff0c;建议全面禁用。当然了&#xff0c;或许在你的场景下还是挺好的&#xff0c;还能发挥作用&#xff0c;那就继续使用吧&#xff0c;把本文当做参考就好。不过&#xff0c;可能有的人人为只需要把 query_cache_size 大…

Java 基础之java运算符

运算符&#xff0c;顾名思义就是用于计算的符号。按功能分为&#xff1a;赋值运算符、算术运算符、关系运算符和逻辑运算符按操作数的个数分类&#xff1a;单目运算符、双目运算符、三目运算符运算符的目&#xff1a;运算符能连接操作数的个数称为运算符的目运算符的优先级&…

直流电机调速仿真作业

本次调速仿真采用PID调节。首先要确定PID中的各项设计参数&#xff0c;仿真过程中采用临界比例度法确定了大概的Kp值。在若干次调整的过程中&#xff0c;发现加入微分环节后调整时间略有上升&#xff0c;故采用PI调节。调整参数确定为Kp75,Ki22。控制器部分的程序如下图所示。原…

Java运算符优先级和表达式及数据类型转换

计算机程序在处理数据时会进行大量的计算&#xff0c;而数据的运算则需要借助运算符和表达式来完成。表达式是指由操作数和运算符组成的用于完成某种运算功能的语句子表达式Y X * ( Z 10 ) 表达式 其中Y、X、Z、10 称为操作数&#xff0c;、*、 称为运算符。 在…

Bugtags 2016-06-16 更新内容

增加版本管理功能 随着版本的增多&#xff0c;有些历史的版本不再使用&#xff0c;可将这些版本隐藏起来。操作步骤如下&#xff1a;点击设置 - 版本管理&#xff08;管理员可见&#xff09;- 取消勾选需要隐藏的版本即可。隐藏版本后&#xff0c;版本筛选中将不会显示&#xf…

直通车运营系统优化之账户结构设置

国庆期间&#xff0c;小2哥我好好的享受了好几天的日子&#xff0c;说实话&#xff0c;自从做了淘宝&#xff0c;就很少像这期间一样好好的享受了这段日子 。做淘宝有时候真的很苦逼&#xff0c;每天的工作时间比一个打工的还长&#xff0c;熬夜到凌晨才睡也是家常便饭&#xf…

深度学习代码练习

代码下载地址&#xff1a;https://github.com/daijifeng001/R-FCN 对应论文&#xff1a;Object Detection via Region-based Fully Convolutional Networks 1、代码里面给的数据库下载链接失效&#xff0c;需要去代码下载主页最下方给定的资源区下载。 2、按照要求一步一步运行…

rabbitmq 不同的消费者消费同一个队列_消息队列王者--rabbitMQ深入理解--工作过程、消费模式、持久化等...

概述之前已经对rabbitMQ的一些基本概念做了介绍和不同MQ之间的比较&#xff0c;今天主要对rabbitMQ的一些方面做扩展。01消息队列Broker&#xff1a;简单来说就是消息队列服务器实体。Exchange&#xff1a;消息交换机&#xff0c;它指定消息按什么规则&#xff0c;路由到哪个队…