用户中心和图片集成
tornado 用户密码 bcrypt加密
简介
bcrypt 可以通过加盐的方式对密码进行加密,更加的安全可靠。
优点
md5加密,每个对应的明文密码,对应的是一样的加密的密文,比较容易的进行解密。而bcrypt每一次的明文密码得到的是不同的加密的密文,因为密文是通过随机的盐结合加密,所以更加安全。
新建一个utils文件夹,用来存放工具类
新建一个py文件,这里是encryption.py,是密码加密的方法
from bcrypt import hashpw, gensalt # 加密 def passwd_encryption(pwd, passwd=None, is_encrypt=True): if is_encrypt: # 这个是随机生成的盐 salt = gensalt(12) # 这个是通过盐去加密 passwd = hashpw(pwd.encode('utf8'), salt) return passwd else: # 将输入的明文密码与密文密码进行加密,是否等于密文密码。 return hashpw(pwd.encode('utf8'), passwd.encode('utf8'))
mian.py
import tornado.web import os from pycket.session import SessionMixin from models.auth import Image from models.db import session class BaseHandler(tornado.web.RequestHandler, SessionMixin): ''' 实现用户认证, 重写 get_current_user() 方法来判断当前用户,比如可以基于cookie的值 ''' def get_current_user(self): return self.session.get('user') class IndexHandler(tornado.web.RequestHandler): ''' 首页:用户上传图片的展示 ''' def get(self): images = session.query(Image).all() return self.render('index.html', images=images) class ExploreHandler(tornado.web.RequestHandler): ''' 最近上传的图片页面 ''' def get(self): return self.write('发现或最近上传的图片页面') class ImageHandler(tornado.web.RequestHandler): ''' 单个图片的详情页面 ''' def get(self, image_id): return self.write('详情页') class UpImageHandler(BaseHandler): ''' 图片上传 ''' @tornado.web.authenticated def get(self): return self.render('up_image.html') @tornado.web.authenticated def post(self): upload_path = 'static/upload' # 配置文件上传的路径 file_metas = self.request.files.get('image_file', []) # 获取文件对象 # 写入内容 for meta in file_metas: # meta {'filename':'1.jpg', 'body': b'xxx'} file_name = meta.get('filename') file_path = os.path.join(upload_path, file_name) # 拼接路径 with open(file_path, 'wb') as f: f.write(meta.get('body')) # 写入内容 # print(self.current_user) # 入库 Image.add_images('upload/%s' % file_name, self.current_user) return self.write('图片上传成功')
前端页面index.html
{% extends 'base.html' %} {% block title %} 首页 {% end %} {% block body %} {% for image in images %} <p><img src="{{ static_url(image.image_url) }}" alt=""></p> {% end %} {% end %}
前端页面upload_image.html
{% extends 'base.html' %} {% block title %} 图片上传 {% end %} {% block body %} <form action="" method="post" enctype="multipart/form-data"> {% module xsrf_form_html() %} <!-- 跨站请求伪造(防护) --> <input type="file" name="image_file"><br> <button type="submit">上传</button> </form> {% end %}