• 项目 02 图片上传和展示


    项目 02 图片上传和展示

       main.py

    import tornado.web
    import os
    from utils import photo #导入utils里面的photo.py
    
    class IndexHandler(tornado.web.RequestHandler):
        """
        Home page for user,photo feeds
        """
        def get(self,*arg,**kwargs):
            images_path = os.path.join(self.settings.get('static_path'),'uploads')
            images = photo.get_images(images_path)
            self.render('index.html',images = images)
    
    
    class ExploreHandler(tornado.web.RequestHandler):
        """
        Explore page,photo of other users
        """
        def get(self,*arg,**kwargs):
            images_urls = photo.get_images('./static/uploads/thumbs')#打开指定路径下的文件
            self.render('explore.html',images=images_urls)#打开explore文件并将图片放上去
    
    class PostHandler(tornado.web.RequestHandler):
        """
        Single photo page and maybe
        """
        def get(self,*arg,**kwargs):
            self.render('post.html',post_id = kwargs['post_id'])
    
    class UploadHandler(tornado.web.RequestHandler):
        """
        接收图片上传
        """
        def get(self,*arg,**kwargs):
            self.render('upload.html')#返回这个页面
    
        def post(self, *args, **kwargs): #接收文件
            img_files = self.request.files.get('newimg',None)#用RequestHandler的一种属性,接收表单上传的时候会有一个属性可以用get访问,默认为空
            for img_file in img_files:#可能同一个上传的文件会有多个文件,所以要用for循环去迭代它
                with open('./static/uploads/'+img_file['filename'],'wb') as f:#表单提交上来是一个文件,需要用open来打开
                    f.write(img_file['body'])#body就是文件的内容即图片
    
                photo.make_thumb('./static/uploads/'+img_file['filename']) #在创建文件的同时建立减缩图
    
    
            self.write({'msg': 'got file:{}'.format(img_files[0]['filename'])})#浏览器显示返回

      templates/uploads.html

    {% extends 'base.html' %}
    
    {% block title %} index page {% end %}
    
    {% block content %}
        <form action="/upload" enctype="multipart/form-data" method="post"> #依次是接收文件(即提交接口),form表单要提交的标准操作,方法*/
            <input type="file" name="newimg">
            <input type="submit">
        </form>
    {% end %}

      utils 工具类函数包

      utils/photo.py

    import glob
    import os
    from PIL import Image
    
    def get_images(path):#函数意义是将某个路径下所有的文件会返回成一个列表
        images = []
        for file in glob.glob(path+'/*.jpg'):#所有目录下面为*.jpg的所有图片,
            images.append(file)#添加所有file,每个file都是一个全路径
        return images
    
    def make_thumb(path):
        file,ext = os.path.splitext(os.path.basename(path))#分离路径
        im = Image.open(path)#打开路径文件
        im.thumbnail((200,200))#进行减缩
        im.save('./static/uploads/thumbs/{}_{}x{}.jpg'.format(file,200,200),'JPEG')#保存在指定的绝对路径下
  • 相关阅读:
    tensorflow源码资源,github
    数据挖掘实战
    Ansible--快速入门
    gRPC C#学习
    Linq之Expression高级篇(常用表达式类型)
    十大经典排序算法(动图演示)
    ASP.NET Web API 管道模型
    docker面试题和解答(一)
    浅谈委托和事件(一)
    面试题三
  • 原文地址:https://www.cnblogs.com/xuchengcheng1215/p/9135894.html
Copyright © 2020-2023  润新知