用户中心和图片集成

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 %}

在static目录下新建一个upload目录,用来保存上传的图片

posted @ 2020-05-24 22:32  不会飞的鲨鱼  阅读(138)  评论(0)    收藏  举报