由于,用户需要一个修改数据的页面,例如说像是修改手机号一类的。我们就可以做出通过id名称,去从form表单中获取,然后直接提交内容给数据库
建立如下参数:
参数名 | 参数说明 | 备注 |
---|---|---|
id | 用户id | 不能为空 |
邮箱 | 可以为空 | |
phone | 手机号 | 可以为空 |
响应数据
参数名 | 参数说明 |
---|---|
id | 用户ID |
role_id | 角色ID |
mobile | 手机号 |
邮箱 |
def put(self):
# 这次不适用reqparse获取数据,采用form表单中获取
try:
id = int(request.form.get('id').strip())
email = request.form.get('email').strip() if request.form.get('email') else ''
phone = request.form.get('phone').strip() if request.form.get('phone') else ''
usr = models.User.query.get(id)
if usr:
usr.email = email
usr.phone = phone
# 提交给数据库
db.session.commit()
return to_dict_msg(200,msg="修改数据成功!!!")
except Exception as e:
print(e)
return to_dict_msg(10000)
# flask_shop/user/view.py
# 此文件用于处理关于用户的业务逻辑,视图都写在这
# 导入用户的蓝图对象,这里的user不是文件,是在user.py定义好的蓝图对象
from ast import arg
import email
from flask import request
from flask_shop.user import user,user_api
from flask_shop import models,db
from flask_restful import Resource,reqparse
import re
from flask_shop.utils.message import to_dict_msg
from flask_shop.utils.tokens import generate_auth_token,verify_auth_token,login_requed
@user.route("/")
def index():
return "Hello user"
# 用flask_restful实现注册功能
# 使用flask_restful 必须继承Resource类
class User(Resource):
# get请求访问
def get(self):
# 防止没有用户id产生报错
try:
# 通过参数获取用户的id
id = int(request.args.get('id').strip())
usr = models.User.query.filter_by(id = id).first()
print(type(usr))
if usr:
return to_dict_msg(200, usr.to_dict(), "获取用户成功!")
else:
return to_dict_msg(200, [], '没有此用户')
except Exception as e:
print(e)
return to_dict_msg(10000)
# post请求访问
def post(self):
name = request.form.get('name')
pwd= request.form.get('pwd')
real_pwd = request.form.get('real_pwd')
nick_name = request.form.get('nick_name')
phone = request.form.get('phone')
email = request.form.get('email')
# 验证数据的正确性
if not all([name,pwd,real_pwd]):
return to_dict_msg(10000)
if len(name)<2:
return to_dict_msg(10001)
if len(pwd)<2:
return to_dict_msg(10012)
if pwd != real_pwd:
return to_dict_msg(10013)
# 正则表达式验证手机号和邮箱
# ^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(17[013678])|(18[0,5-9]))\\d{8}$
if not re.match(r'^1[35789]\d{9}$',phone):
return to_dict_msg(10014)
if not re.match(r'^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$',email):
return to_dict_msg(10015)
# 由于可能在数据库中会抛出异常,还是得做一个尝试
try:
# 提交数据
# 注意这里的密码要加密处理,不可以直接返回给保存到数据库中得变量pwd,返回给函数password
usr = models.User(name=name, password = pwd, nick_name = nick_name, phone = phone,email = email)
db.session.add(usr)
db.session.commit()
return to_dict_msg(200)
except Exception as e:
print('-------------------------')
print(e)
return to_dict_msg(2000)
def put(self):
# 这次不适用reqparse获取数据,采用form表单中获取
try:
id = int(request.form.get('id').strip())
email = request.form.get('email').strip() if request.form.get('email') else ''
phone = request.form.get('phone').strip() if request.form.get('phone') else ''
usr = models.User.query.get(id)
if usr:
usr.email = email
usr.phone = phone
# 提交给数据库
db.session.commit()
return to_dict_msg(200,msg="修改数据成功!!!")
except Exception as e:
print(e)
return to_dict_msg(10000)
# flask_restful注册路由地址
user_api.add_resource(User,'/user')
# 定义一个获取用户列表的类
class UserList(Resource):
def get(self):
# 用于数据验证
parser = reqparse.RequestParser()
# 给定规定的数据格式
parser.add_argument('name',type=str)
parser.add_argument('pnum',type=int)
parser.add_argument('psize',type=int)
# 获取数据
args = parser.parse_args()
try:
# 把参数传递给变量
name = args.get('name')
# 如果获取不到就往下执行,如果获取到就赋值给pnum
pnum = args.get('pnum') if args.get('pnum') else 1
psize = args.get('psize') if args.get('psize') else 2
# 对name进行过滤
if name:
# 如果存在,则就模糊搜索
users_p = models.User.query.filter(models.User.name.like(f'%{name}%')).paginate(pnum,psize)
else:
# 如果不存在name,全部输出
users_p = models.User.query.paginate(pnum,psize)
data = {
'pnum':pnum,
'totalPage':'',
'users':[]
}
return to_dict_msg(200,data,'获取用户列表成功')
except Exception as e:
return to_dict_msg(10000)
user_api.add_resource(UserList,'/user_list')
# 后端登录的实现
# 使用get请求不安全
@user.route('/login',methods=['POST'])
# 调用验证是否登录的装饰器
# @login_requed
def login():
# 从前端输入框中获取,此时还没写前端使用postman测试
name = request.form.get('name')
pwd= request.form.get('pwd')
# 判断两个是否为非空值
if not all([name,pwd]):
return {'status':10000,'msg':'数据不完整'}
if len(name) > 1:
# SQLALCHEMY查询语句:获取用户字段,得到实例对象
usr = models.User.query.filter_by(name =name).first()
if usr:
# 调用usr视图中的验证蓝图
if usr.check_password(pwd):
# 登录成功生成token,实现免密登录
token = generate_auth_token(usr.id,10000000000)
# 用于验证token是否可以使用
verify_auth_token(token)
return to_dict_msg(200,data={'token':token})
return {'status':10001,'msg':'用户名或密码错误'}#防止用户暴力测试