• 项目 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 %}
  • 相关阅读:
    visual studio 2013 生成依赖项关系图出错
    redHat 安装mono 错误
    redHat 安装mono 错误
    msdn帮助,离线下载
    w
    msdn帮助,离线下载
    vs2013 找不到帮助 help查看器
    vs2013 找不到帮助 help查看器
    c# wpf 加密文本
    c# wpf 加密文本
  • 原文地址:https://www.cnblogs.com/xuchengcheng1215/p/9214763.html
Copyright © 2020-2023  润新知