BVDNM-7 论坛功能

贴吧是最简单最容易实现的网站功能,我们就先做这个吧。
其实开发所有的功能,大概都是这么一个顺序

一、新建一个app应用

python manage.py startapp tool_03

在这里插入图片描述
在这里插入图片描述

二、添加settings.py配置

在这里插入图片描述

三、建立帖子和评论的模型

#mysite/tool_03/models.py
class Blog(models.Model):
    name = models.CharField(max_length=50,default="default name")
    user_id = models.IntegerField(default=1)
    user_name = models.CharField(max_length=10,default="default name")
    content = models.CharField(max_length=500,default="default content")
    created_at = models.IntegerField(default=1514879938)

    def __str__(self):
        return self.name

class Comment(models.Model):
    biog_id = models.IntegerField(default=1)
    user_id = models.IntegerField(default=1)
    user_name = models.CharField(max_length=10,default="default name")
    content = models.CharField(max_length=50,default="default content")
    created_at = models.IntegerField(default=1514879938)

    def __str__(self):
        return self.name

四、更新数据库

python manage.py makemigrations
python manage.py  migrate

在这里插入图片描述
在这里插入图片描述

五、注册模型

打开mysite/tool_03/admin.py,在后台注册我们刚写的两个model

from django.contrib import admin
from .models import *

# Register your models here.
admin.site.register(Blog)
admin.site.register(Comment)

六、访问后台

	python manage.py runserver 8003
我忘记密码了于是我重新设置了超级管理员:
	python manage.py createsuperuser

然后访问地址http://127.0.0.1:8003/admin/打开后台,如果看到了Blog和Comment,说明成功
在这里插入图片描述

七、修改响应函数

#mysite/main/views.py
from tool_03.models import Blog
def index(request):
    a=Blog.objects.all().order_by('-id')[:5]
    return render(request,"basemain.html",{'blogs':a})

八、修改主页

#main\templates\basemain.html
{% for blog in  blogs %}
	<article class="article">
		<h2><a href="#0"><b>{{blog.name}}</b></a></h2>
		<p class="small text-secondary">发表于{{blog.created_at|datetime}}</p>
		<p class="text-secondary">{{blog.content}}</p>
		<p><a href="/blog/{{blog.id}}">继续阅读<i class="uk-icon-angle-double-right"></i></a></p>
	</article>
	<hr class="article-divider">
{% enpty %}
<h2>暂无通知</h2>
{% endfor %}

九、访问主页

在这里插入图片描述
注意看,Invalid filter:‘datetime’,我们错在哪里了?没错,就是这个{{ blog.created_at|datetime }},你写了datetime,却没有注册,这怎么可能跑得通呢?所以我们要写这个filter:在main文件夹里新建一个叫templatetags的文件夹,并加入如下几个文件(不要加入__pycache__文件夹,否则出错)
在这里插入图片描述
之后打开poll_extras.py,写如下内容

from django import forms, template
import time
from datetime import datetime

register = template.Library()


@register.filter(name="datetime")
def datetime_filter(t):
    delta = int(time.time()-t)
    if delta <60:
        return u'1分钟前'
    if delta <3600:
        return u'%s分钟前' % (delta//60)
    if delta <8640:
        return u'%s小时前' % (delta//3600)
    if delta <604800:
        return u'%s天前' %(delta//8640)
    dt=datetime.fromtimestamp(t)
    return u"%s年%s月%s日"%(dt.year,dt.month,dt.day)

注意那句delta = int(time.time() -t),如果你什么输入数据也没有(比如引用了引用了不存在的blog),是会在这里报错的。但是请不要怀疑,我们的代码没问题,你只是没输入数据。接下来,我们在主页里加上一句
在这里插入图片描述

十、完善帖子功能

首先我们新建一个网页。当然了,仍然要有{% extends ‘basemain.html’ %}{% block title %} 发帖 {% endblock %}{% block title2 %} 发帖 {% endblock %}这三行。接下来,在block content里面输入如下内容

	{% block content %} 
<div id='app' class="form-group">
	<label class="form=label">标题</label>
	<div class="forn-controls">
		<input v-model="name" type="text" placeholder="标题" class='form-controls'>
	</div>
	<label class="form=label">内容</label>
	<div class="forn-controls">
		<textarea v-model="content"  rows="8"  placeholder="标题" class='form-controls' style="resize:none;"></textarea>
	</div>
	<br>
		<button @click="send" class="btn btn-primary"><i class="fa fa-save"></i>发布</button>
</div>
{% endblock %}

接下来要写发帖按钮的响应函数,在block vuejs里面这么写

{% block vuejs %}
<script type="text/javascript">
var vm=new vue({
	el:'#app',
	data:{
		name:'',
		content:'',
	}
	methods:{
		send(){
			data_to_send={
				name:this.name,
				content:this.content,
				};
			console.log(data_to_send);
			data_to_send=JSON.stringify(date_to_send);
			console.log(data_to_send);
			$.post('/tool_03/', 
				data_to_send,
				function(r, err){
					if(err === 'success') {
						alert('修改乙发布')
						return location.assign('/');
					}else {
						return console.log(err);
					}			
				});
		},
});
})
</script>
{% endblock %}

写完这些后,前端的部分就写完了。接下来是后台部分,我们打开tool_03/view.py,开始写函数。这个函数的作用是对我们发的帖子进行接收和处理:

from django.shortcuts import render
from diango.contrib.auth.decorators import login_required
from diango.http import JsonResponse
from .models import *
import ison,time


# Create your views here.
@login_required(login_url='/accounts/login/')
def tool_03(request):
    if request.method == "POST":
        a=json.loads(request.body.decode('utf-8'))
        print(a)
        Blog.objects.create(name=a['name'],user_id=request.user.id,user_name=request.user.name,
        content=a['content'],content_at=int(time.time()))
        return JsonResponse({'ok':'ok']},safe=False)
    return render(request,'tool_03_01.html')

def view_blog(request,blog_id=0):
    print(blog_id)
    return render(request,'tool_03_02.html')

此处值得注意的是:函数分为POST和GET两部分。当函数收到请求的时候,会先判断你发的请求(request)是POST还是GET,如果是GET(进入发帖页面时发送的request)则跳到下边去,返回发帖页面tool_03_01.html,反之则进入POST模块,对发来的帖子进行解析,并存入数据库。所以这个函数才会有两个return。

十一、评论功能

url.py里添上入口
在这里插入图片描述
最终效果分为三部分:上面看贴,中间写评论,下面看评论。也就是说我们任何部分的代码(Html/Bootstrap,VueJs,Django)都应该是三部分。
首先是页面布局(Html/Bootstrap)
在这里插入图片描述
在这里插入图片描述
vue的部分
在这里插入图片描述
Django部分
在这里插入图片描述
tool_03是发帖函数,刚才我们写过了,不管。下边这个view_blog才是评论函数。同样的,它也分两部分,GET的部分用来看贴看评论,POST的部分用来发评论,用if进行判断,最终有两个return。以后所有的django函数基本上都会是这个样子,一个入口,一个if,两个部分,两个return。

001. 允许自定义积分,幸运,威望,等级,经验,认证会员,总版主,区版主,论坛版主的名称 114. 选择风格时加入预览(wensui建议) 115. HTML权限允许开放人员目前只要认证会员及版主即可(原先只允许版主) 116. 增进今**发帖,总发帖及欢迎新会员的功能,使显示数字与实际数据真正接近准确 隐藏版面的帖子也将被一同计入 117. 修正修改评价帖子时的不足 118. 加强短信通知功能:新注册用户,精华,评价,奖惩,删除,转移帖子 119. 修正首页明星插件不能单独显示第二行的错误 120. 后台重做论坛列表有一定的提速 121. 重新生成用户排名及凌晨数据更新现在更稳定了 122. 修复查看用户资料时,非版主的区版或总版主能显示担任信息的问题 123. 对后台或前台遗留的部分代码作了性能优化,有一定的速度提升 124. 现在用户修改资料后,一些不立即生效的信息现在可以立即生效 125. 为修改用户加入写入间隔检测,防止写盘类的破坏程序 126. 解决导航的菜单浏览器兼容问题,并支持多层菜单 取消CSS原先样式定义:TBMenu MenuBG MenuColor 127. 专业版本的搜索功能继续加强,修复原先的记录可能产生的重复记录 跳转页面更方便 131. 风格允许定义小局表格头尾部的HTML控制(比如顶部的导航) 133. 增加RSS订阅主题功能,可按版面或全部版面 134. 增加删除附件回赠(消耗)积分功能 135. 允许定义限制版面的帖子标题是否总是加密,限制标准开始统一 136. 新增迷你方式显示,支持显示版面帖子及内容,虚拟htm地址 统一游客状态,利于搜索引擎收录 137. 新增风格参数,SubjectFont,用来定义专题名称CSS样式 138. 修复后台修改用户资料版主类型用户错误的问题 139. 现在统计数据库的读写次数更加准确 145. 减轻密码找回功能暴力破解情况下带来的请求压力 146. 开始对切换版面带来的写入操作进行限制(WriteEvent) 147. 对游客作特殊处理,不需要额外的内存开销,并尽可能的减少硬盘资源开销 147. 改进在线用户显示分页查看性能及版面 148. 统一精华区与讨论区的显示界面 149. 解决cookie跨域访问问题 150. 退出时增加是否清空Cookie信息的选择 151. 解决一直以来论坛编码解码上的一个潜在错误 152. 对一些页面进行瘦身,进行JS文件分离 154. 总专题及版面专题,预载数据更稳定,而不需要事先访问版面 158. 允许自定义版面是否直接显示专题区 159. MP标签支持多媒体文件切换播放 160. 后台管理,批量更新 新增批量替换(更新)帖子内容功能达到某种目的 171. 兼容IP地址访问下的登录问题 172. 首页及二级版面的JS模板开始统一使用同一种模板,模板代码需要重新调整 模板调用采用JS包含,取消使用SERVER对像调用 173. 支持版面帖子列表的模板自定义显示 174. 支持定义某个分类在首页显示是否简约方式显示 175. 支持定义每个版面(或分类版面)之下的子版面,是否简约方式显示 178. 采用新的方式调用显示在线用户,兼容大部分主流浏览器 179. 修复专题显示在某些浏览器下显示混乱的问题 180. 专题调用显示采用新的方式,能兼容更多的浏览器 181. 支持投票直接显示功能,取消弹出窗口 182. 支持查看投票人员直接显示功能,取消弹出窗口 183. 投票采用POST 防止调用上的漏洞 184. 支持购买帖子及查看购买帖子成员直接调用显示 仍然支持购买再次确认的提示 185. 现在访问无权限查看的版面的帖子时不会再增加点击数了 186. 改善查看投票用户及购买帖子用户性能 187. 对查看帖子内容页面进行多重分析,再次进行性能优化,减轻服务器压力 190. Jmail邮件发送方式可以采用JMail.Message方式 若使用局域网或是本地SMTP服务器,邮件发送速度会很理想 192. 对于新注册的用户,因为邮件未能收到,可以使用忘记密码功能, 填写问题答案等信息,再次要求发送邮件 (要求在用户参数中设置忘记密码找回功能使用 即时更改密码并发送邮件) 193. 现在密码论坛要求输入密码时不会再提示错误信息 194. 支持查看帖子内容时的模板自定义 196. 解决论坛同其它系统编码不同可能产生乱码的问题 197. 对用户增加声望时,取消再奖励财富值,减少声望,也将不影响财富值 199. 插入部分隐藏标签时,提示先选择限制条件 200. 回复帖子标题并非必填项,*号不再显示 201. 普通用户能给帖子上颜色,并且将用户的财富值与此关联 Const LMTDEF_ColorSpend = 1 ' 设定帖子颜色消耗多少魅力值(财富) 当某用户有权限选择并且选择帖子标题类型(HTML,红绿蓝)时,帖子颜色选择无效 202. 发表只限某用户查看的帖子时,若对应用户不存在时将会提示错误 207. 允许设定用户一定积分值则不再需要验证码,包括发帖,短消息及编辑帖子 215. 后台风格模板选择,可以选择是否纯HTML输出,或是使用JS模板 218. 现在对发表内容有了更人性化的设计,开页将自动调节光标位置至填写内容处 219. 论坛短消息允许的ubb编码支持得更广 220. 升级论坛编辑器,主要从以下几个方面作了努力: .适当兼容Mozilla系列浏览器 .默认编辑方式全部设为高级(html)编辑方式,除非浏览器不支持,比如禁用JS .IE能享受所有功能,Mozilla系列拥有大部分编辑功能 .表情支持分页 .允许复制帖子内容为文本格式,高级编辑则复制为HTML文本内容 .全部编码转换在客户端完成,服务器端取消所有编码转换工作 .帖子表情取消一半 .修复或完善一些LeadCode中存在的错误或缺陷 .原先UBB参数设置中的发帖模式作用目前刚好相反,比如原先设为普遍模式现在将视为高级模式 .增强一些论坛编码 - 图片允许批定高度和宽度,格式为[IMG=边框粗细,排版方式,高度,宽度] - 允许单独指定文字的背景色,格式为[BGCOLOR=颜色]文字 221. 对来访用户浏览器及系统使用信息作了更新,现在将更准确 222. 预览帖子不需要再次提交,支持即时预览. 223. 改进菜单功能,对firefox等浏览器支持得更稳定,并开始支持多菜单功能 226. 附件图片缩略图现在开始允许自定义高宽 227. 允许设定附件最多允许同时上传的数量 229. 附件相关的模块作了大变动 - 支持比如百兆的大附件上传和下载 - 附件查看支持按版面来加密限制查看 - 附件存在的物理地址可以设置为不公开 - 现在下载的保存文件名称同作者上传的文件名称 - 删除相应帖子同时删除相应的附件 - 如果你的空间安装有Gfl SDK 上传的图片将自动生成缩略 - 生成的缩略大小可以在后台自定义 - 下载附件的密钥字符串可以在后台自行修改 - 允许设置最多一次发帖可以同时提交的附件数量 - 对于旧版的图片上传附件,提供升级程序,可以产生新的缩略图(支持TIF PSD等图像文件) - 附件允许插入帖子内容排版,未插入的将自动添加 - 允许修改附件内容,以及附件注释. 230. 用户头像上传功能修复,允许同步提交,并保留原先的图像组件缩小转换功能 231. 对防刷新的操作过频等问题作了更好的处理 232. 允许发布财富交易帖(财富为可定制名称)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值