项目 07 Model与数据优化

项目班 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- 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 %}
原文地址:https://www.cnblogs.com/xuchengcheng1215/p/9214763.html