项目班 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 %}

最新文章

  1. 【Asp.Net Core】二、添加控制器和视图
  2. Codeforces CF#628 Education 8 F. Bear and Fair Set
  3. python安装使用talib
  4. JavaScript垃圾回收(三)——内存泄露
  5. Spring Boot 连接MySql数据库
  6. Python遍历文件夹枚举所有文件类型
  7. eclipse 新建servlet
  8. qt下的跨目录多工程编译
  9. Mysql 获取表的comment 字段
  10. SQL Server获取连续区间的日期
  11. Android单元测试之二:本地测试
  12. Problem B: 故障电灯(light)
  13. 安装composer Failed to decode zlib stream 问题解决方法
  14. TCP三次握手与Tcpdump抓包分析过程
  15. Git Base For Linux
  16. 多核CPU配合负载均衡可以这样用,为老板省点钱
  17. puppet cron资源管理
  18. spark提交任务的三种的方法
  19. 使用 IntraWeb (27) - 基本控件之 TIWAudio、TIWMPEG、TIWFlash、TIWSilverlight、TIWSilverlightVideo、TIWApplet、TIWQuickTime、TIWActiveX
  20. hibernate 双向 1-n(具体分析)

热门文章

  1. px-rem自适应转换(进阶@rem:40rem; )
  2. ACM学习历程—FZU2195 检查站点(树形DP || 贪心)
  3. 【LeetCode】014. Longest Common Prefix
  4. photon server (1)
  5. bzoj 2850 巧克力王国 —— K-D树
  6. word2010以上版本中快捷录入数学公式的方法(二)
  7. css菜鸟学习之block,inline和inline-block概念和区别
  8. 浏览器重绘(repaint)和回流(reflow)的那点事
  9. 洛谷-机器翻译-NOIP2010提高组复赛
  10. 做c语言的码农专业发展方向