tornado 相关说明
需求: 增加 /save 的 handler,实现异步保存指定 URL 图片的功能
从网页上得到一张图片地址,由这个地址将图片保存到服务器,并将相关数据保存到数据库
import requests
from .main import AuthBaseHandler
from utlis.photo import UploadImg, add_post_for
class SyncSaveHandler(AuthBaseHandler):
"""同步版本的保存 url """
def get(self, *args, **kwargs):
save_url = self.get_argument('save_url', None) res = requests.get(save_url)
uim = UploadImg('a.jpg', self.settings['static_path'])
uim.save_upload(res.content)
uim.save_thumb() post = add_post_for(self.current_user, uim.upload_url, uim.thumb_url)
# post = add_post_for(username, uim.upload_url, uim.thumb_url) self.redirect('/post/{}'.format(post.id))
from tornado.gen import coroutine # 装饰器
from tornado.httpclient import AsyncHTTPClient # 异步模块 from .main import AuthBaseHandler
from utlis.photo import UploadImg, add_post_for
class AyncSaveHandler(AuthBaseHandler):
"""异步版本保存 URL"""
@coroutine
def get(self, *args, **kwargs):
save_url = self.get_argument('save_url', None)
username = self.get_argument('name', None)
client = AsyncHTTPClient() # res = requests.get(save_url)
res = yield client.fetch(save_url, request_timeout=20)
uim = UploadImg('a.jpg', self.settings['static_path'])
uim.save_upload(res.body)
uim.save_thumb() post = add_post_for(self.current_user, uim.upload_url, uim.thumb_url)
# post = add_post_for(username, uim.upload_url, uim.thumb_url) self.redirect('/post/{}'.format(post.id))