02: 实现发布帖子功能
目录:抽屉项目之js最佳实践
01: 实现注册登录功能
02: 实现发布帖子功能
03: 将帖子展示到页面、点赞
04: 层级评论
目录:
- 1.1 发布帖子中的5个功能点
- 1.2 各功能点代码
1.1 发布帖子中的5个功能点 返回顶部
1.2 各功能点代码 返回顶部
1、功能1和功能2:展示和隐藏发布框
<body><divclass="pg-content"><divclass="w"><div><ahref="javascript:void(0);"class="publish_btn"onclick="show_publish_frm(true)">发 布 +</a></div></div></div><divclass="shelter hide"><divclass="publish_frm hide"><divclass="close_publish_frm"onclick="show_publish_frm(false)">×</div></div></div> </body>
index.html
/*展示发布框*/ functionshow_publish_frm(flag) {if(!is_login()){show_login_reg_frm();return false;}if(flag){$("div.shelter").removeClass("hide");$("div.publish_frm").removeClass("hide");}else{$("div.shelter").addClass("hide");$("div.publish_frm").addClass("hide");} }
base.js
2、功能3:for循环模板,展示到页面,并绑定点击事件
<body><divclass="shelter hide"><divclass="publish_frm hide"><divclass="publish_catalog">{% for c in enable_catalog %}<ahref="javascript:void(0);"cid="{{ c.id }}"onclick="publish_radio_btn(this)">{{ c.name }}</a>{% endfor %}<script>functionpublish_radio_btn(ele) {$(ele).siblings().removeClass("current");$(ele).addClass("current");}functionclear_publish_form() {//切换分类后重置提交内容 $("textarea.publish_text").val("");$(".publish_frm a.current").removeClass("current");$("#fo")[0].reset();$("div.uploaded_preview").children().remove();}</script></div></div></div> </body>
index.html
3、功能4:上传图片实现预览功能
<body><divclass="shelter hide"><divclass="publish_frm hide"><divclass="upload_div"><iframeid="if"name="if"style="display: none;"></iframe><formid="fo"method="post"enctype="multipart/form-data"action="/app01/upload/"target="if"><inputtype="file"accept="image/jpeg,image/png"id="publish_file"name="publish_file"class="publish_file"style="display: none;"onchange="upload_img()"></form><ahref="javascript:void(0);"class="upload_btn"onclick="document.getElementById('publish_file').click()">上传图片</a></div><divclass="uploaded_preview"></div></div></div> </body>
index.html
/*触发回调函数,提交图片实现预览功能*/ functionupload_img() {document.getElementById('if').οnlοad=callback;document.getElementById('fo').submit(); }/*上传完毕后的回调函数*/ functioncallback() {var t = $("#if").contents().find('body').text();var result =JSON.parse(t);console.log(result);if(result.status=='ok'){var a = document.createElement('a');a.href=result.link;a.target= '_blank';var img = document.createElement('img');img.src=result.link;a.appendChild(img);$("div.uploaded_preview").html(a.outerHTML);} }
base.js
#用户上传图片 defupload(request):if request.method == 'POST':#上传文件,暂时只支持jpg、png,且体积在4M以下,#计算文件的md5,ret = {'status': '','msg': '','error': '','link': '',}img= request.FILES.get("publish_file")if img.size > settings.UPLOAD_PARAMETERS['SIZE_LIMIT']:ret['status'] = 'fail'ret['error'] = '文件大小超过限制。当前限制是:' + settings.UPLOAD_PARAMETERS['SIZE_LIMIT'] + ',您的文件大小是:' +img.sizeelif img.content_type not in settings.UPLOAD_PARAMETERS['FILE_TYPE']:ret['status'] = 'fail'ret['error'] = '不接受该文件类型。'else:#获取后缀file_ext = os.path.splitext(img.name)[1] if '.' in img.name else 'jpg'#生成临时文件路径letters = 'abcdefghijklmnopqrstuvwxyz0123456789' #用于生成临时文件名tmp_filename = ''tmp_file_path= ''whileTrue:#如果同名的临时文件已存在,则重新再取tmp_filename = ''.join(random.sample(letters, 8))tmp_file_path= os.path.join(settings.UPLOAD_PARAMETERS['TMP_PATH'], tmp_filename)if notos.path.exists(tmp_file_path):break#获取文件数据received_size =0m=hashlib.md5()with open(tmp_file_path,'wb') as fh:for chunk inimg.chunks():#b''.join([file_obj, chunk]) fh.write(chunk)m.update(chunk)received_size+=len(chunk)#接收完毕if received_size ==img.size:#读取到全部数据后,计算md5hash_value =m.hexdigest()#移动文件,并使用md5值做新文件名new_file_name = hash_value +file_extnew_file_path= os.path.join(settings.STATICFILES_DIRS[0], 'img', 'upload', new_file_name)ifos.path.isfile(new_file_path):#新目标文件已经存在,无需覆盖,并清理临时文件 os.remove(tmp_file_path)else:#如果目标新文件不存在,则将临时文件移动过去并重命名 os.rename(tmp_file_path, new_file_path)ret['status'] = 'ok'ret['msg'] =new_file_nameret['link'] = settings.STATIC_URL + 'img/upload/' +new_file_nameelse:#未获取到完整的数据ret['status'] = 'fail'ret['error'] = '数据不完整,请重新上传'return HttpResponse(json.dumps(ret))
views.py
4、功能5:提交帖子内容、类别、上传图片服务端存储路径
<body><divclass="pg-content"><divclass="w"><div><ahref="javascript:void(0);"class="publish_btn"onclick="show_publish_frm(true)">发 布 +</a></div><divclass="clearfix">{% block content %}{% endblock %}</div></div></div><divclass="shelter hide"><divclass="publish_frm hide"><divclass="close_publish_frm"onclick="show_publish_frm(false)">×</div><divclass="publish_text"><label><textareaclass="publish_text"placeholder="说点什么吧"id="publish_text"></textarea></label></div><divclass="publish_catalog">{% for c in enable_catalog %}<ahref="javascript:void(0);"cid="{{ c.id }}"onclick="publish_radio_btn(this)">{{ c.name }}</a>{% endfor %}<script>functionpublish_radio_btn(ele) {$(ele).siblings().removeClass("current");$(ele).addClass("current");}</script></div><divclass="upload_div"><iframeid="if"name="if"style="display: none;"></iframe><formid="fo"method="post"enctype="multipart/form-data"action="/app01/upload/"target="if"><inputtype="file"accept="image/jpeg,image/png"id="publish_file"name="publish_file"class="publish_file"style="display: none;"onchange="upload_img()"></form><ahref="javascript:void(0);"class="upload_btn"onclick="document.getElementById('publish_file').click()">上传图片</a></div><divclass="uploaded_preview"></div><divclass="publish_btn_box"><ahref="javascript:void(0);"onclick="publish()">发 布</a></div></div></div> </body>
index.html 整体代码
functionpublish() {var data ={};data['pub_text'] = $.trim($("textarea.publish_text").val());//检查文本内容是否为空if(data['pub_text'].length==0){alert("文字内容不能为空。");return false;}//检查是否有选择类别data['catalog'] = $("div.publish_catalog a.current").attr("cid");if(!data['catalog']){alert("请选择一个分类");return false;}//获取图片var img = $("div.uploaded_preview img")[0];if(img){data['img_link'] = $(img).attr("src");}$.post({url:"/app01/publish/",data: data,dataType:"json",success:function(response) {if(response.status=='ok'){alert("发布成功!");clear_publish_form();show_publish_frm(false);$("div.shelter").addClass("hide");}},error:function(xhr) {}}); }
base.js
转载于:https://www.cnblogs.com/xiaonq/p/8214503.html
02: 实现发布帖子功能相关推荐
- Flask项目实战——10—(前台板块页面搭建、文本编辑页面搭建、发布帖子信息前验证权限、帖子模型搭建、发布帖子功能、帖子信息渲染到前后台页面)
1.前台板块页面搭建 视图文件查询数据传输到前台界面:前台蓝图文件:apps/front/views.py 注意数据的收集方法和数据传输的类型. # -*- encoding: utf-8 -*- & ...
- 4.发布帖子,评论帖子
目录 一:发布帖子 二:帖子详情 三:查看评论 四:评论帖子 一:发布帖子 用到的表:DiscussPost 方法:用到AJAX,网页能将增量更新呈现在页面上,而不需要刷新整个页面 异步通信技术,虽然 ...
- Python全栈(八)Flask项目实战之10.前台发布帖子和后台帖子管理页面搭建
文章目录 一.前台板块页面搭建 二.发布帖子页面搭建 三.前台帖子模型创建 四.文章的发布 1.基本实现 2.项目优化 (1)功能优化--Markdown编辑上传上传本地图片 (2)代码优化--抽离A ...
- 百度发布全功能AI平台!
Datawhale发布 百度 BML 全功能 AI 平台 越来越多企业开始用AI解决实际问题,比如汉印使用AI在线下进行果蔬识别称重.上海浦东水务使用AI巡检阀门系统.猎头企业使用AI模型高效利用沉默 ...
- 【springboot】【redis】springboot+redis实现发布订阅功能,实现redis的消息队列的功能...
springboot+redis实现发布订阅功能,实现redis的消息队列的功能 参考:https://www.cnblogs.com/cx987514451/p/9529611.html 思考一个问 ...
- redis的观察者模式----------发布订阅功能
2019独角兽企业重金招聘Python工程师标准>>> 众所周知,Java,C++等面向对象有一种常见的设计模式:观察者模式,redis这种机制叫做发布订阅功能. 以下假设已redi ...
- Countly 19.02.1 发布,实时移动和 web 分析报告平台
百度智能云 云生态狂欢季 热门云产品1折起>>> 实时移动和 web 分析报告平台 Countly 19.02.1 发布了. 新版更新内容主要有: 新特性 [前端] 根据路由名称 ...
- Spring Boot 2.x基础教程:使用Redis的发布订阅功能
通过前面一篇集中式缓存的使用教程,我们已经了解了Redis的核心功能:作为K.V存储的高性能缓存. 接下来我们会分几篇来继续讲讲Redis的一些其他强大用法!如果你对此感兴趣,一定要关注收藏我哦! 发 ...
- dedecms自定义表单如何添加发布时间功能
这篇文章给大家分享的是有关dedecms自定义表单如何添加发布时间功能的内容.小编觉得挺实用的,因此分享给大家做个参考.一起跟随小编过来看看吧. dedecms自定义表单怎么添加发布时间功能? d ...
最新文章
- Tengine Web服务器概述
- stl里面stack的注意事项
- java 定义一个未知长度数组
- java 中的访问修饰符
- 中国企业云计算应用现状及需求
- 计算机网络管理员五级试题,计算机网络管理员考试试题库和答案.doc
- CSS里:focus-within 的作用和用法
- 好947 Mybatis 配置resultMap 带參数查询Map 注意selectOne数据库返回结果一条数据库 否则会报错...
- android事务队列处理的实现
- [NAACL19]一个更好更快更强的序列标注成分句法分析器
- 8 对象、类与面向对象编程
- ASP.net网页导出Excel中文乱码解决方案
- 拆一台微型计算机步骤,台式微型计算机拆装.doc
- html网页背景图片 菜鸟教程,CSS3 背景
- python实现数据库的增删改查
- 各种交换机接口及连接方法介绍【详细图文】
- AndroBench手机性能测试【转】
- 从0开始安装k8s1.25【最新k8s版本——20220904】
- 荣耀全家桶框架插件(关联P30pro、Mate20、荣耀20pro等)
- Java——常用开发工具