11.用户信息——sql语句的使用、Tornado更改用户信息、Tornado上传图片头像

1.用户信息_初始化

1.1使用VSCode执行sql代码

删除原来的表,新添加一行gener,生成表后插入数据
sql代码已经写好了,直接运行即可

INSERT INTO `t_user` (`id`, `create_time`, `email`, `nick_name`, `password`, `gender`, `signatrue`, `pic`, `status`) VALUES ('5ddf83c8b78aa66cfb5b025e', '2050-01-01 00:00:00', '1329372653@qq.com', 'gaofei', '202cb962ac59075b964b07152d234b70', 0, 'Hello,记录美好生活!', '/static/img/1575015920996-2.jpg', 0);
INSERT INTO `t_user` (`id`, `create_time`, `email`, `nick_name`, `password`, `gender`, `signatrue`, `pic`, `status`) VALUES ('5de0b487b07c402cc7d1a00f', '2050-01-01 00:00:00', '912455894@qq.com', '啦啦啦啦', '202cb962ac59075b964b07152d234b70', 1, 'Hello,记录美好生活!', '/static/img/1575016093531-3.jpg', 0);
INSERT INTO `t_user` (`id`, `create_time`, `email`, `nick_name`, `password`, `gender`, `signatrue`, `pic`, `status`) VALUES ('5de0d2696e78ad79c2e2c64a', '2050-01-01 00:00:00', '1@qq.com', '寂寞ゝ专属.', '202cb962ac59075b964b07152d234b70', 0, 'Hello,记录美好生活!', '/static/img/1575015590957-1.jpg', 0);
INSERT INTO `t_user` (`id`, `create_time`, `email`, `nick_name`, `password`, `gender`, `signatrue`, `pic`, `status`) VALUES ('5de0d74a5dd0a380dbc1aca7', '2050-01-01 00:00:00', '2@qq.com', 'ー£゛走了ノ没留下什么', '202cb962ac59075b964b07152d234b70', 0, 'Hello,记录美好生活!', '/static/img/1575016293522-4.jpg', 0);
INSERT INTO `t_user` (`id`, `create_time`, `email`, `nick_name`, `password`, `gender`, `signatrue`, `pic`, `status`) VALUES ('5de0d8745dd0a380dbc1aca9', '2050-01-01 00:00:00', '3@qq.com', '言晚', '202cb962ac59075b964b07152d234b70', 0, 'Hello,记录美好生活!', '/static/img/1575016586255-5.jpg', 0);
INSERT INTO `t_user` (`id`, `create_time`, `email`, `nick_name`, `password`, `gender`, `signatrue`, `pic`, `status`) VALUES ('5de0d9375dd0a380dbc1acab', '2050-01-01 00:00:00', '4@qq.com', '人生如戏', '202cb962ac59075b964b07152d234b70', 0, 'Hello,记录美好生活!', '/static/img/1575016781746-6.jpg', 0);
INSERT INTO `t_user` (`id`, `create_time`, `email`, `nick_name`, `password`, `gender`, `signatrue`, `pic`, `status`) VALUES ('5de0d9d65dd0a380dbc1acad', '2050-01-01 00:00:00', '5@qq.com', '香了一口※', '202cb962ac59075b964b07152d234b70', 0, 'Hello,记录美好生活!', '/static/img/1575016947448-下载 (5).jpeg', 0);
INSERT INTO `t_user` (`id`, `create_time`, `email`, `nick_name`, `password`, `gender`, `signatrue`, `pic`, `status`) VALUES ('5de0da8e5dd0a380dbc1acaf', '2050-01-01 00:00:00', '6@qq.com', '丶花少', '202cb962ac59075b964b07152d234b70', 0, 'Hello,记录美好生活!', '/static/img/1575017124098-下载 (4).jpeg', 0);
INSERT INTO `t_user` (`id`, `create_time`, `email`, `nick_name`, `password`, `gender`, `signatrue`, `pic`, `status`) VALUES ('5de0db705dd0a380dbc1acb2', '2050-01-01 00:00:00', '7@qq.com', 'Bitter 祭末', '202cb962ac59075b964b07152d234b70', 0, 'Hello,记录美好生活!', '/static/img/1575017346967-下载 (3).jpeg', 0);
INSERT INTO `t_user` (`id`, `create_time`, `email`, `nick_name`, `password`, `gender`, `signatrue`, `pic`, `status`) VALUES ('5de0dc775dd0a380dbc1acb4', '2050-01-01 00:00:00', '8@qq.com', '妳愛我嗎?', '202cb962ac59075b964b07152d234b70', 0, 'Hello,记录美好生活!', '/static/img/1575017609800-下载 (2).jpeg', 0);
INSERT INTO `t_user` (`id`, `create_time`, `email`, `nick_name`, `password`, `gender`, `signatrue`, `pic`, `status`) VALUES ('5de0dd345dd0a380dbc1acb6', '2050-01-01 00:00:00', '9@qq.com', '少女病`', '202cb962ac59075b964b07152d234b70', 0, 'Hello,记录美好生活!', '/static/img/1575017800873-7.jpeg', 0);
INSERT INTO `t_user` (`id`, `create_time`, `email`, `nick_name`, `password`, `gender`, `signatrue`, `pic`, `status`) VALUES ('5de0ddaa5dd0a380dbc1acb8', '2050-01-01 00:00:00', '10@qq.com', '王思聪', '202cb962ac59075b964b07152d234b70', 0, 'Hello,记录美好生活!', '/static/img/1575017936343-7c1ed21b0ef41bd5a7f81d995ada81cb39db3d37.png', 0);
INSERT INTO `t_user` (`id`, `create_time`, `email`, `nick_name`, `password`, `gender`, `signatrue`, `pic`, `status`) VALUES ('5de0de4f5dd0a380dbc1acba', '2050-01-01 00:00:00', '11@qq.com', '殃国娇颜', '202cb962ac59075b964b07152d234b70', 0, 'Hello,记录美好生活!', '/static/img/1575018084252-下载 (1).jpeg', 0);
INSERT INTO `t_user` (`id`, `create_time`, `email`, `nick_name`, `password`, `gender`, `signatrue`, `pic`, `status`) VALUES ('5e4a27910cb2afe7559ae7d9', '2050-01-01 00:00:00', '110@qq.com', '110', '202cb962ac59075b964b07152d234b7078', 0, 'Hello,记录美好生活!', '/static/img/1581918166606-avatar.jpg', 0);

1.2登录效果展示

在这里插入图片描述

2.用户信息_更新信息

2.1观察前端需要的接口与传递的数据

在这里插入图片描述
在这里插入图片描述
分析可得,已经传递了用户所有得信息,并且api接口时api/user/update

2.2开发接口

WTForms表单验证

# forum/wtforms.py
# 完整注册(给t_user表)增加数据之前的数据验证
from wtforms_tornado import Form
from wtforms.fields import StringField
from wtforms.fields.simple import HiddenField
from wtforms.validators import DataRequired, Length
# 对更新的数据验证
class UpdateUserForm(Form):
    id = HiddenField()
    email = StringField('账号', validators=[DataRequired(message='请填写合法的邮箱地址'),Length(min=5, max=20, message='请输入5-20长度的邮箱')])
    nick_name = StringField('昵称',validators=[Length(min=2, max=10, message='请输入2-10长度的昵称')])
    gender = StringField('性别')
    signature = StringField('签名')
    pic = StringField('头像')

接口编写

# forum/handler/UserHandler.py
from uuid import uuid4
from random import randint

import jwt

from forum.wtforms import UserForm,LoginUserForm, UpdateUserForm
from forum import manager
from forum.models import UserModel
from forum.handler.BaseHandler import BaseHandler
from forum.utils.email_utils import send_mail
from forum.utils.redis_utils import *
from config import secret,email
from forum.decorators import login_required_async



# 更新用户信息接口
class UpdateUserHandler(BaseHandler):
    async def post(self):
        rs_data = {}
        user_form = UpdateUserForm(self.request.arguments)
        # 验证数据
        if user_form.validate:
            id = user_form.id.data
            # 因为前端传递来的数据前后有空格,所以去掉空格,避免修改登录账号
            user_form.email.data = user_form.email.data.strip()
            # peewee_async异步修改数据
            rs = await manager.execute(UserModel.update(**user_form.data).where(UserModel.id == id))
            if rs > 0:
                rs_data['code'] = 200
                rs_data['msg'] = '更新用户信息成功'
            else:
                rs_data['code'] = 500
                rs_data['msg'] = '更新用户信息失败'
        else:
            rs_data['code'] = 500
            rs_data['msg'] = '数据不合法'
        self.finish(rs_data)

挂载路由

# router.py
from forum.handler import BaseHandler,UserHandler
handlers = [
    ('/api/user/update/?', UserHandler.UpdateUserHandler)
]

2.3效果展示

在这里插入图片描述

3用户信息_上传图像并更新到主页展示图片

在修改中,需要上传图片当作头像。

3.1观察前端需要的接口和传递的数据

在这里插入图片描述
同样的,还是和更新信息的接口一直,图片pic利用binary来接收即可
需要在前端展示的话,我们需要保证两个点,第一个:我们的user_form需要接收到pic的文件路径(因为更新sql需要使用)第二个:我们的文件路径要保存的完整(检查数据库)

3.2接口代码展示

# 更新用户信息接口
class UpdateUserHandler(BaseHandler):
    async def post(self):
        rs_data = {}
        user_form = UpdateUserForm(self.request.arguments)
        # 验证数据
        if user_form.validate:
            id = user_form.id.data
            # 因为前端传递来的数据前后有空格,所以去掉空格,避免修改登录账号
            user_form.email.data = user_form.email.data.strip()

            # 获取头像文件数据
            pic = self.request.files.get('pic')[0]
            # 因为有多位用户上传图片,为了避免图片的文件名重复,所以随机生成一个名字来保存
            file_name = uuid4().hex
            # 获取源文件的后缀名
            file_suffix = os.path.splitext(pic.get('filename'))[-1]
            full_name = file_name + file_suffix
            # 为了保证用户可以访问到自己上传的头像,因此要把头像上传到静态文件夹中,否则会上传到本文件下
            full_path = os.path.join(settings.get('static_path'),'img',full_name)
            # 保存图片头像
            with open(full_path, 'wb') as f:
                f.write(pic.get('body'))
            print(full_path)
            # 更新用户的头像地址 /static/img/xxx.png
            user_form.pic.data = os.path.join('/static/img',full_name)
            
            # peewee_async异步修改数据
            rs = await manager.execute(UserModel.update(**user_form.data).where(UserModel.id == id))
            if rs > 0:
                rs_data['code'] = 200
                rs_data['msg'] = '更新用户信息成功'
            else:
                rs_data['code'] = 500
                rs_data['msg'] = '更新用户信息失败'
        else:
            rs_data['code'] = 500
            rs_data['msg'] = '数据不合法'
        self.finish(rs_data)

3.3效果展示

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想成为数据分析师的开发工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值