from flask import Blueprint, request, jsonify, session from flask_mail import Message from werkzeug.security import check_password_hash from init.book_init import db, mail from book_from.user_from import UserFrom, LoginFrom from models.book_model import User, EmailCaptchaModel from sqlalchemy.exc import IntegrityError import string import random api = Blueprint("user_api", __name__, url_prefix='/user') # 验证码 @api.route("/get_email") def user_email(): email = request.args.get('email') source = string.digits * 4 captcha = ''.join(random.sample(source, 4)) # 发送邮件 try: message = Message(subject='xxx', sender=email, recipients=[email], body=f'验证码为: {captcha}') # mail.send(message) except RuntimeError as e: return jsonify({'code': 500, 'message': '邮件发送失败,请稍后重试'}) # 将验证码存入数据库 try: email_captcha = EmailCaptchaModel(email=email, captcha=captcha) db.session.add(email_captcha) db.session.commit() except RuntimeError as e: db.session.rollback() return jsonify({'code': 500, 'message': '验证码存储失败,请稍后重试', 'captcha': captcha}) return jsonify({'code': 200, 'message': '请求成功', 'captcha': captcha}) @api.route("/get_enroll", methods=['POST']) def user_enroll(): if request.method != "POST": return jsonify({'code': 400, 'message': '请求错误'}) else: form = UserFrom(request.form) try: if form.validate(): email = form.email.data captcha = form.captcha.data username = form.username.data password = form.password.data # 这里可以添加对验证码的验证逻辑 user = User(email=email, username=username, password=password) db.session.add(user) db.session.commit() return jsonify({'code': 200, 'message': '注册成功'}) else: errors = form.errors return jsonify({'code': 400, 'message': '注册失败', 'errors': errors}) except IntegrityError: db.session.rollback() return jsonify({'code': 500, 'message': '数据库写入失败'}) @api.route("/get_login", methods=['POST']) def user_login(): if request.method != "POST": return jsonify({'code': 400, 'message': '请求错误'}) else: form = LoginFrom(request.form) try: if form.validate(): username = form.username.data password = form.password.data # 根据用户名在数据库中查找用户 user = User.query.filter_by(username=username).first() if not user: return jsonify({'code': 401, 'message': '用户不存在'}) if user.password == password: session["uuid"] = user.id # 登录成功 return jsonify({'code': 200, 'message': '登录成功'}) else: return jsonify({'code': 401, 'message': '用户名或密码错误'}) else: errors = form.errors return jsonify({'code': 400, 'message': '登录失败', 'errors': errors}) except Exception as e: return jsonify({'code': 500, 'message': '服务器错误'}) @api.route('/get_logout') def user_logout(): session.clear() return jsonify({'code': 200, 'message': '退出成功'})
flask---博客后端接口(3. 登录接口实现)
文章详细描述了如何使用Flask框架创建RESTfulAPI,包括获取邮箱验证码、用户注册验证、登录验证以及登出功能,涉及数据库操作和表单验证。
摘要由CSDN通过智能技术生成