项目班 07 Model与数据优化

  html默认可以用直接用的方法和变量

{{ static_url(p.image_url) }} #static_url表示直接获取静态文件url

{{ handler.current_user }} #handler.current_user表示直接获取用户名

  handlers/main.py 更新

class IndexHandler(AuthBaseHandler):
"""
Home page for user,photo feeds 主页
"""
@tornado.web.authenticated #如果没有登录(拿不到current_user),会自动跳转到 /login ,并把当前url加到next参数里面
def get(self,*arg,**kwargs):
posts = get_post_for(self.current_user) #current_user 是获取get_current_user的用户名;然后拿到该用户的图片(是一个列表)
self.render('index.html',posts = posts) #在index.html里面可以直接引用posts里面的image_url,id等 class ExploreHandler(AuthBaseHandler):
"""
Explore page,photo of other users 浏览简缩图
"""
@tornado.web.authenticated
def get(self,*arg,**kwargs):
posts = get_all_posts() #获取所有图片
self.render('explore.html',posts=posts)#打开explore文件并将图片放上去

  utils/account.py 更新

def add_post_for(username,image_url,thumb_url):#将路径保存到数据库
'''
保存该用户的图片
'''
user = session.query(User).filter_by(name=username).first()#拿到user
post = Post(image_url=image_url,thumb_url=thumb_url,user=user)
session.add(post)
session.commit()
# return post.id def get_post_for(username):
'''
查看该用户图片
'''
user = session.query(User).filter_by(name=username).first() #获取用户名
# posts = session.query(Post).filter_by(user=user) #返回的是实例的对象,是一个列表list
return user.posts #获取该用户名的posts ,这个posts = session.query(Post).filter_by(user=user),
#因为在下面的Post表中relationship里面有外键约束backref='post',要查询posts的属性可以通过user.posts的方式来查找 def get_post(post_id):
'''
获取指定id的post
'''
post = session.query(Post).get(post_id) #从数据库里面查找指定id的post
return post def get_all_posts():
'''
获取所有id的post
'''
posts = session.query(Post).order_by(Post.id.desc()).limit(8) #order_by将id做下倒序排序,并且只显示最新的8个
# posts = session.query(Post).order_by(Post.id.desc())[:8] 这种方法也是可以的,前面posts取出来的是一个列表,通过[:8]的方法反序查询(切片)
return posts

  templates/index.html更新

{% extends 'base.html' %}

{% block title %}index page{% end %}

{% block content %}

<div class="row">
<div class="col-12 text-center">
<h2>关注用户最新动态</h2>
<p class="lead">最新上传的图片列表</p>
</div>
<div class="col-12 col-sm-8 offset-sm-1 align-self-center">
{% for p in posts %} {# 对posts里面的每个图片进行迭代,运行一次输出一个图片;静态路径访问:就是访问静态文件目录,通过静态路径来打开文件
后面static目录后面的目录就是服务器本地图片所存储的目录;还有就是handler访问,通过具体的handler来访问 #}
<figure class="figure" style="max-width: 500px">
<a href="/post/{{ p.id }}"> {# 跳转到main.py下面的post路由,并用正则写入posts实例p的id,通过id来找寻该图片的储存路径,进而打开目录 #}
<img src="{{ static_url(p.image_url) }}" class="figure-img img-fluid rounded" alt="a figure.">
</a>
<figcaption class="figure-caption">upload by {{ p.user.name }}</figcaption>
</figure>
{% end %}
</div> </div>
{% end %}

  templates/post.html 更新

{% extends 'base.html' %}

{% block title %}post page{% end %}

{% block content %}
<div class="row justify-content-center">
<div class="col-12 col-sm-10">
<img src="{{ static_url(post.image_url) }}" width="560px" />
<h4>{{ post.user.name }}在{{ post.created or '' }}上传</h4>
</div> </div>
{% end %}

  templates/explore.html 更新

{% extends 'base.html' %}

{% block title %}explore page{% end %}

{% block content %}
{% for p in posts%}
<a href="/post/{{ p.id }}">
<img src="{{ static_url(p.thumb_url) }}" />
</a>
{% end %}
{% end %}

项目 07 Model与数据优化的更多相关文章

  1. 项目架构开发:数据访问层之Query

    接上文 项目架构开发:数据访问层之Repository 上一章我们讲了IRepository接口,这张我们来讲IQuery 根据字面意思就可以知道,这次主要讲数据查询,上一章我们只针对单表做了查询的操 ...

  2. 项目中常用的MySQL 优化

    本文我们来谈谈项目中常用的MySQL优化方法,共19条,具体如下: 一.EXPLAIN 做MySQL优化,我们要善用EXPLAIN查看SQL执行计划. 下面来个简单的示例,标注(1.2.3.4.5)我 ...

  3. 《深度访谈:华为开源数据格式 CarbonData 项目,实现大数据即席查询秒级响应》

    深度访谈:华为开源数据格式 CarbonData 项目,实现大数据即席查询秒级响应   Tina 阅读数:146012016 年 7 月 13 日 19:00   华为宣布开源了 CarbonData ...

  4. 循序渐进开发WinForm项目(5)--Excel数据的导入导出操作

    随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到C#开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了. 其实也许我 ...

  5. ASP.NET MVC 学习3、Controller左手从Model获取数据,右手传递到View页面

    参考:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/accessing-your-models-dat ...

  6. 项目架构开发:数据访问层之Cache

    数据访问层简单介绍 数据访问层,提供整个项目的数据访问与持久化功能.在分层系统中所有有关数据访问.检索.持久化的任务,最终都将在这一层完成. 来看一个比较经典的数据访问层结构图 大概可以看出如下信息 ...

  7. 项目架构开发:数据访问层之Logger

    接上文 项目架构开发:数据访问层之Cache 本章我们继续ILogger的开发 ILogger.cs public interface ILogger { void Info(object messa ...

  8. 项目架构开发:数据访问层之Repository

    接上文 项目架构开发:数据访问层之Logger 本章我们继续IRepository开发,这个仓储与领域模式里边的仓储有区别,更像一个工具类,也就是有些园友说的“伪仓储”, 这个仓储只实现单表的CURD ...

  9. 项目架构开发:数据访问层之UnitOfWork

    接上文 项目架构开发:数据访问层之IQuery 本章我们继续IUnitOfWork的开发,从之前的IRepository接口中就可以看出,我们并没有处理单元事务, 数据CUD每次都是立即执行的,这样有 ...

随机推荐

  1. Tangent space(切线空间)

    https://en.wikipedia.org/wiki/Frenet%E2%80%93Serret_formulas The tangent, normal, and binormal unit ...

  2. redhat 安装lamp

    安装Apache yum install httpd 安装MySql yum install mysql mysql-server 安装php yum install php 安装php的mysql模 ...

  3. boost::io_service解读

    boost::io_service解读 asio是boost提供的一个c++异步编程模型库,其核心类io_service,在多线程编程里面提供了任务队列和任务分发功能,在socket.io编程里主要作 ...

  4. 我的SIP开发之路

    http://hi.baidu.com/ltlovelty/blog/item/837baf1ece7fc6f11ad57647.html 经过对SIP协议和开源协议栈快半年的研究,我现在终于有点入门 ...

  5. 问题7:如何实现用户的历史记录功能(最多n条)

    实例:制作猜字游戏,添加历史记录功能,显示用户最近猜过的数字 解决方案:使用容量为n的队列存储历史记录 使用标准库colections中的deque,一个双端循环队列 程序退出前,可以使用pickle ...

  6. 如何在Windows平台使用VS搭建C++/Lua的开发环境

    转自:http://ju.outofmemory.cn/entry/95358 本文主要介绍如何在Windows平台利用VS搭建C++/Lua开发环境.这里的“C++/Lua开发环境”主要指的是C++ ...

  7. 数据库高手(DBA专家 ,SSIS,replacation ,tourble shooting)

    http://www.cnblogs.com/qanholas/category/266780.html 随笔分类 - mssql SQL Server 2008 Datetime Cast 成 Da ...

  8. JConsole远程监控配置

    首先,看本机(Windows)安装了JRE没 Win > CMD 打开命令窗口 如有安装,则会显示以下版本信息:若没有显示,就安装吧 C:\Users\Administrator>java ...

  9. 太有用了,所以转:Delphi下16进制位图数据转位图

    如果我们在Form中拖入一个Image控件,并设置好picture后,Alt+F12就可以看到Form的源代码中已经将图片转成了16进制字符串,如下: object Image1: TImage Le ...

  10. 项目:条件查询 通过StringBulider和ArrayList(参数有序) 手动拼接sql

    条件查询的sql拼接 参数拼接 public List<Product> findAll(Product product) throws SQLException { //1.1 拼凑sq ...