基于 flask 框架的模拟instagram 图片分享网站的开发 3

news/2024/5/12 2:32:53/文章来源:https://blog.csdn.net/zhyh1435589631/article/details/51868463

1. 摘要

这次添加的功能是 实现首页和 个人信息页面的异步加载功能
传送门:
基于 flask 框架的模拟instagram 图片分享网站的开发 2
基于 flask 框架的模拟instagram 图片分享网站的开发 1

2. 流程

2.1 profile.js 分析

  1. 这里需要编写相应的js 代码, 主要由前端提供, 虽然是前端提供的代码, 我们还是需要读懂它, 在必要的时候做相应的修改
  2. 代码中, oExports 相当于是一个字典, 记录了关键字 与相应处理函数之间的映射关系, ie, 使用initialize 调用的时候, 本质就是在执行 fInitialize 函数调用
  3. 在 fInitialize 中, 我们首先找到 需要加载 图片 的区域 ‘div.js-image-list’, 初始化相应数据, 并为元素 ‘.js-load-more’ 添加点击事件
  4. fTpl 中, oData 对应着 传入的 json 数据, 当然也可以是自己构建的字典数据 ( 在 index 中 加载评论的时候, 我们就需要自行加载自己的 comments 字典数据)
  5. fRequestData 用来请求数据, 这里面将 需要异步加载的 html 代码写入进来
$(function () {var oExports = {initialize: fInitialize,// 渲染更多数据renderMore: fRenderMore,// 请求数据requestData: fRequestData,// 简单的模板替换tpl: fTpl};// 初始化页面脚本oExports.initialize();function fInitialize() {var that = this;// 常用元素that.listEl = $('div.js-image-list');// 初始化数据that.uid = window.uid;that.page = 1;that.pageSize = 6;that.listHasNext = true;// 绑定事件$('.js-load-more').on('click', function (oEvent) {var oEl = $(oEvent.currentTarget);var sAttName = 'data-load';// 正在请求数据中,忽略点击事件if (oEl.attr(sAttName) === '1') {return;}// 增加标记,避免请求过程中的频繁点击oEl.attr(sAttName, '1');that.renderMore(function () {// 取消点击标记位,可以进行下一次加载oEl.removeAttr(sAttName);// 没有数据隐藏加载更多按钮!that.listHasNext && oEl.hide();});});}function fRenderMore(fCb) {var that = this;// 没有更多数据,不处理if (!that.listHasNext) {return;}that.requestData({uid: that.uid,page: that.page + 1,pageSize: that.pageSize,call: function (oResult) {// 是否有更多数据that.listHasNext = !!oResult.has_next && (oResult.images || []).length > 0;// 更新当前页面that.page++;// 渲染数据var sHtml = '';$.each(oResult.images, function (nIndex, oImage) {sHtml += that.tpl(['<a class="item" href="/image/#{id}">','<div class="img-box">','<img src="/#{url}">','</div>',//'<div class="img-mask"></div>',//'<div class="interaction-wrap">',//    '<div class="interaction-item"><i class="icon-comment"></i>#{comment_count}</div>',//'</div>','</a>'].join(''), oImage);});sHtml && that.listEl.append(sHtml);},error: function () {alert('出现错误,请稍后重试');},always: fCb});}function fRequestData(oConf) {var that = this;var sUrl = '/profile/images/' + oConf.uid + '/' + oConf.page + '/' + oConf.pageSize + '/';$.ajax({url: sUrl, dataType: 'json'}).done(oConf.call).fail(oConf.error).always(oConf.always);}function fTpl(sTpl, oData) {var that = this;sTpl = $.trim(sTpl);return sTpl.replace(/#{(.*?)}/g, function (sStr, sName) {return oData[sName] === undefined || oData[sName] === null ? '' : oData[sName];});}
});

2.2 建立请求的路由

  1. 这部分需要和 相应的js 文件中 的 fRequestData 定义的路由保持一致, 并输出json 数据
@app.route('/profile/images/<int:id>/<int:page_num>/<int:per_page>/')
@login_required
def profile_paginate(id, page_num, per_page):user = User.query.get(id)paginate = user.images.paginate(page=page_num, per_page=per_page, error_out=False)map = {'has_next' : paginate.has_next}images = []for image in paginate.items:imgvo = {'id':image.id, 'url':image.url}images.append(imgvo)map['images'] = imagesreturn json.dumps(map)

2.3 index 页面

同理可以编写index 页面的异步加载功能

3. 处理效果

这里写图片描述
这里写图片描述

4. 遇到的问题

  1. 由于jquery 代码不熟悉, 加载的时候, 评论部分无法加载, 后来才想到, 应该修改 需要传递的 json 信息, 将评论作为一个列表传送
    这里写图片描述
    相应的 renderMore 部分代码:
   function fRenderMore(fCb) {var that = this;// 没有更多数据,不处理if (!that.listHasNext) {return;}that.requestData({uid: that.uid,page: that.page + 1,pageSize: that.pageSize,call: function (oResult) {// 是否有更多数据that.listHasNext = !!oResult.has_next && (oResult.images || []).length > 0;// 更新当前页面that.page++;// 渲染数据var sHtml = '';$.each(oResult.images, function (nIndex, oImage) {sHtml_part1 = that.tpl(['<article class="mod">','<header class="mod-hd">','<time class="time">#{ images.create_date }</time>','<a href="/profile/#{image_user_id}" class="avatar">','   <img src="/#{image_user_head_url}">','</a>','<div class="profile-info">','<a title="#{image_user_username}" href="/profile/#{image_user_id}">#{image_user_username}</a>','</div>','</header>','<div class="mod-bd">','<div class="img-box">','<a href = "/image/#{image_id}">','<img src="/#{image_url}">',' </div>',' </div>',' <div class="mod-ft">','  <ul class="discuss-list">',' <li class="more-discuss">',' <a>',' <span>全部 </span><span class="">#{image_comments_length}</span>','<span> 条评论</span></a>','</li>'].join(''), oImage);sHtml_part2 = ' ';// 解析评论列表中的数据for (var ni = 0; ni < oImage.image_comments_length; ni++){dict = {'comment_user_username':oImage.comment_user_username[ni], 'comment_user_id':oImage.comment_user_id[ni],'comment_content':oImage.comment_content[ni] };sHtml_part2 += that.tpl(['    <li>','    <a class="_4zhc5 _iqaka" title="#{comment_user_username}" href="/profile/#{comment_user_id}" data-reactid=".0.1.0.0.0.2.1.2:$comment-17856951190001917.1">#{comment_user_username}</a>','    <span>','        <span>#{comment_content}</span>','     </span>','   </li>',].join(''), dict);}sHtml_part3 =    that.tpl(['  </ul>',' <section class="discuss-edit">','  <a class="icon-heart"></a>','  <form>','     <input placeholder="添加评论..." type="text">','  </form>','  <button class="more-info">更多选项</button>',' </section>',' </div>',' </article>  '].join(''), oImage);sHtml += sHtml_part1 + sHtml_part2 + sHtml_part3;});sHtml && that.listEl.append(sHtml);},error: function () {alert('出现错误,请稍后重试');},always: fCb});}
  1. 修改js 代码之后, 直接输入网址, 不会立即生效, 需要 刷新浏览器(ps, 被这个坑了好久)

5. 工程地址

https://code.csdn.net/zhyh1435589631/instagram_simulation/tree/master

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

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

相关文章

基于 flask 框架的模拟instagram 图片分享网站的开发 4

1. 摘要 这次添加的功能是 个人页图片上传功能和图片详情页评论异步加载功能 传送门&#xff1a; 基于 flask 框架的模拟instagram 图片分享网站的开发 3 基于 flask 框架的模拟instagram 图片分享网站的开发 2 基于 flask 框架的模拟instagram 图片分享网站的开发 1 2. …

基于 flask 框架的模拟instagram 图片分享网站的开发 7 (爬虫机器人)

1. 前言 我们之前使用flask实现了一个模拟instagram的图片分享网站的开发&#xff0c; 但是图片的更新需要用户上传&#xff0c; 但是由于用户比较少&#xff0c; 鉴于这个问题&#xff0c; 我们就考虑引入一个爬虫机器人&#xff0c; 自动的向web程序相关的数据库表项中写入数…

url带斜杠和不带斜杠对seo优化的影响

点我进入原文 ps: seo 是指搜索引擎优化 url带斜杠和不带斜杠对seo优化的影响 作为seo的专员对于这个问题&#xff0c;我觉得很多细心的人都能发现&#xff0c;这二者的区别&#xff0c;但是不知道其中奥妙。今天博主给大家说说关于搜索引擎网址中带/与不带/对于seo的影响。 在…

高并发高流量网站架构

http://blog.csdn.net/SmartTony/archive/2010/09/09/5874485.aspx Web2.0的兴起&#xff0c;掀起了互联网新一轮的网络创业大潮。以用户为导向的新网站建设概念&#xff0c;细分了网站功能和用户群&#xff0c;不仅成功的造就了一大批新生的网站&#xff0c;也极大的方便了上网…

从“奥运门票网站800万访问量”想到的成本、质量、进度、风险等关系

看到这个新闻后颇有一番滋味&#xff0c;更体验到我一直关注的软件性能着实无处不在&#xff0c;这个案例也确实值得我们好好反思一下。 不知道网友们有没有报名参加国际日语考试的——这个网站每年05年前都有人不能报名&#xff0c;因为报名人数太多&#xff0c;所以报名当日大…

h5跳微信小程序流程实现——使用云函数,不开通静态网站

官方开源库&#xff1a; GitHub TCloudBase/WXSEVER-SMS 参考教程&#xff1a; https://developers.weixin.qq.com/community/develop/doc/000ae2a7a7c9402a4d8bca2875b409 此教程为官方提供&#xff0c;包含视频文档 步骤&#xff1a; 1. 开通云开发 2. 新建云函数 ope…

搜索引擎SEO外挂:一边搜索,一边看PageRank

搜索引擎SEO外挂&#xff1a;一边搜索&#xff0c;一边看PageRank 下载地址&#xff1a;多么乐站长工具 我原来曾写过一篇统计分析搜索引擎排名和Page Rank 关联分析 的文章。很多人引用&#xff0c;回复和我讨论了我的结论。有赞成的&#xff0c;有反对的&#xff0c;有鼓励的…

seo优化:把百度放进数据库

seo优化:把百度放进数据库 有时候我想&#xff0c;能把百度的数据放进数据库&#xff0c;用广大程序员熟悉的sql语句查询百度的搜索结果应该是一个不错的主意。在这方面Google早已经跨出了一大步&#xff0c;利用Google Search API 把Google的搜索结果放进数据库是很容易办到得…

商业网站 第八章 注册登陆模板设计

注册——插入记录 服务器行为——添加——插入记录——连接:web_ljdata——插入到表格&#xff1a;T_user——获取值自&#xff1a;form1(注册表单&#xff09;——表单元素——注册成功后&#xff1a;插入后转到&#xff08;注册成功表单&#xff09; 验证登陆信息 数据库面板…

网站推荐机制中的艺术、科学与商务问题

网站推荐机制是电子商务或内容网站的核心功能之一。例如你在一个网站买了一本书后&#xff0c;网站会推荐其他你可能会感兴趣的书。这被认为是亚马逊等电子商务巨头成功的关键。本文对几个出色的推荐系统进行了较透彻的分析。 2006年10月&#xff0c;Netflix搞了一次不寻常的有…

平面设计素材网站-庞姿姿

哈喽&#xff0c;大家好&#xff01;今天为大家分享的是免费的平面设计素材网站&#xff0c;设计类网站是大家在所难免需要的了吧&#xff0c;下面就是我发现的比较好用的免费的平面设计素材网站&#xff0c;感兴趣的小伙伴看过来&#xff0c;如果你还发现其它好的网站评论一起…

OpenCms创建网站过程图解——献给OpenCms的初学者们

很多人都听说了OpenCms&#xff0c;知道了它的强大&#xff0c;索性的下载安装了&#xff0c;终于见到了久违OpenCms&#xff0c;看到了它简洁的界面&#xff0c;欣喜过后却不免一脸茫然&#xff0c;这个东西怎么用&#xff0c;我怎么用它来建站&#xff0c;从哪开始&#xff0…

视觉素材-免费高清!10个无版权限制的大图特供网站

今天为大家整理目前优秀的提供免费图片素材资源网站&#xff0c;这些网站的图片质量相当高&#xff0c;大部分为高分辨率&#xff08;高解析&#xff09;&#xff0c;并且&#xff0c;最重要的是&#xff0c;它是免费的&#xff0c;无版权限制&#xff01;同时具备免费、高清&a…

获取任意网站的图标,标题栏logo,网站logo的方法

不错呦~我想要这个图标怎么办呢&#xff1f; 直接使用网址加上&#xff1a; https://csdn.net/favicon.ico 获取到了 说明&#xff1a;这种方法适用于百分之九十的站点&#xff0c;如果你有想要使用的LOGO或者ico可以使用此方法简单获取。

【引用】iphone开发的好网站

分享iphone开发的好网站&#xff0c;希望大家也能提供一些分享下 收藏 1、http://developer.apple.com/iphone/library 这个是官方的代码实例 2、www.cocoachina.com 这个网站比较适合初期开发者&#xff0c;上面的版主之类的也比较热心&#xff0c;一般的问题都会提供帮助 3…

[.Net Core学习一]网站发布

1.首先点击图片IIS上的模块 判断是否存在 如果没有去官网下载 安装好后 按照formwork版发布即可 结果

功能超全的在线文件转换网站

转自http://blog.360converter.com/archives/1314 最近在做一个图标&#xff0c;找了很多的网站&#xff0c;有些根本就不能转换&#xff0c;有些可以转换&#xff0c;不过转换的出来的icon文件超级大&#xff0c;一个6464的icon转换出来达到了几百k&#xff0c;甚至上1M。不过…

免费文字转语音的网站

此文链接&#xff1a;http://blog.360converter.com/archives/1318 在通常的工作生活中&#xff0c;有时&#xff0c;我们需要将一段话&#xff0c;一段文字转换语音&#xff0c;语音文件以音频格式存储传播&#xff0c;如mp3, wma,wav等格式。 为了完成上述功能&#xff0c…

利用一句话木马获取网站web权限

1.登录网站后台&#xff0c;寻找文件上传地方 进入网站管理后台并登录管理员帐户和密码&#xff0c;寻找文件上传点。此网站有多个可上传文件的地方&#xff0c;在这我们选择附件管理页面中的上传附件。 2.写入一句话木马文件&#xff0c;并上传到网站上 为方便寻找可直接在…