1.安装flask_restful
pip install flask_restful
2.导入路由api
flask_shop/user/__init__.py
# flask_shop/user/__init__.py
# user用于管理用户的蓝图
from flask import Blueprint
# 注册flask_restful路由
from flask_restful import Api
# 创建蓝图,记得要注册
#定义好传递给的变量 蓝图对象名称 前缀名
user = Blueprint('user', __name__, url_prefix='/user')
# 注册flask_restful路由
user_api = Api(user)
from flask_shop.user import view
3.创建蓝图
fom表单获取数据,验证数据正确性,提交给数据库
flask_shop/user/view.py
# flask_shop/user/view.py
# 此文件用于处理关于用户的业务逻辑,视图都写在这
# 导入用户的蓝图对象,这里的user不是文件,是在user.py定义好的蓝图对象
from flask import request
from flask_shop.user import user,user_api
from flask_shop import models,db
from flask_restful import Resource
import re
@user.route("/")
def index():
return "Hello user"
# 用flask_restful实现登录功能
# 使用flask_restful 必须继承Resource类
class User(Resource):
# get请求访问
def get(self):
pass
# 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 {'status':10000,'msg':'数据不完整'}
if len(name)<2:
return {'status':10011,'msg':'用户名不合法'}
if len(pwd)<2:
return {'status':10012,'msg':'密码不合法'}
if pwd != real_pwd:
return {'status':10013,'msg':'两次密码不一致'}
# 正则表达式验证手机号和邮箱
# ^((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 {'status':10014,'msg':'手机号不合法'}
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 {'status':10015,'msg':'邮箱不合法'}
# 由于可能在数据库中会抛出异常,还是得做一个尝试
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 {'status':200,'msg':"成功!"}
except Exception:
return {'status':2000,'msg':'异常错误'}
# flask_restful注册路由地址
user_api.add_resource(User,'/user')
# 后端登录的实现
# 使用get请求不安全
@user.route('/login',methods=['POST'])
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):
return {'status':200,'msg':"登录功能"}
return {'status':10001,'msg':'用户名或密码错误'}#防止用户暴力测试