flask---博客后端接口(3. 登录接口实现)

文章详细描述了如何使用Flask框架创建RESTfulAPI,包括获取邮箱验证码、用户注册验证、登录验证以及登出功能,涉及数据库操作和表单验证。
摘要由CSDN通过智能技术生成
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': '退出成功'})
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值