(八)登录认证与学生写作画像

本次将赵昱琨同学之前完成的学生写作画像与智能学习路径规划的后端与目前已有的后端框架进行整合。同时为了实现学生写作画像与智能学习路径规划,需要在之前简易的登录系统上进行重构,所以本次大规模重写了登录模块,同时发现很多过去冗余的代码,也一并进行了删除。

一、学生写作画像

在之前的学生写作画像板块,主要是采用了test_profie文件进行自动化测试。其中为了测试方便并未直接使用DeepSeek API,而是采用通过自己写prompt文件来进行测试填写,本次与当前后端框架合并后,已可以使用DeepSeek API进行测试。

python 复制代码
 logger.info(f"API 响应状态码: {response.status_code}")
        logger.info(f"API 响应内容: {response.text[:500]}...")
        result = response.json()
        
        # 解析API返回的JSON
        content = result['choices'][0]['message']['content']
        cleaned_api_response = remove_think_block(content)
        logger.info(f" 返回结果: {cleaned_api_response}")
        print("类型是:", type(cleaned_api_response))
        print("内容是:", repr(cleaned_api_response))

        return json.loads(cleaned_api_response)
        

可以看到当前要求的是返回json格式,在运行中,曾出现多次json.loads无法正常使用,最后发现虽然已经要求并且规定DeepSeek API返回纯净的json格式,但其仍会返回带有markdown特征的返回格式,这些与think内容一样都可以通过正则匹配来进行清除。清楚后成功调用/update-profile,完成了内容的更新。

本次测试还将作文例子进行了外封包装,将作文例子包装在essay_sample中,便于修改,同时简化主体的代码。

可以看到数据库已经进行了更新,在6个维度进行了点评,并且为6个维度进行了评分,同时还统计了错误类型与次数,这些都可以作为日后在可视化输出时的数据。

二、登录认证

现在采用LoginManager进行管理登录。

python 复制代码
from extensions import LoginManager 

login_manager = LoginManager()
login_manager.init_app(app)  # 绑定到主应用
login_manager.login_view = 'auth.login'  # 设置登录路由

@login_manager.user_loader
def load_user(user_id):
    print(f"尝试加载用户 ID: {user_id}")
    cursor = mysql.connection.cursor(MySQLdb.cursors.DictCursor)
    cursor.execute('SELECT * FROM accounts WHERE id = %s', (user_id,))
    user = cursor.fetchone()
    cursor.close()
    if user:
        from auth_routes import User  # 避免循环导入
        return User(user)
    return None

通过@login_required进行管理,这样便可以获取currentuserid,便于后续调用各种数据,同时还有登陆状态验证。

python 复制代码
from flask import Blueprint, request, jsonify
from flask_login import UserMixin, login_user, logout_user, current_user
import MySQLdb.cursors

auth_bp = Blueprint('auth', __name__)

class User(UserMixin):
    def __init__(self, user_data):
        self.id = user_data['id']
        self.username = user_data['username']

@auth_bp.route('/login', methods=['POST'])
def login():
    data = request.get_json()
    if not data:
        return jsonify({'status': 'error', 'message': '缺少请求数据'}), 400

    username = data.get('username')
    password = data.get('password')

    if not username or not password:
        return jsonify({'status': 'error', 'message': '用户名和密码不能为空'}), 400

    try:
        from app_test_new import user_model  # 避免循环导入
        account = user_model.get_user_by_credentials(username, password)

        if account:
            user = User(account)
            login_user(user)  # 使用Flask-Login的login_user
            print(f"用户 {user.id} 登录成功")
            return jsonify({
                'status': 'success',
                'message': '登录成功',
                'user': {
                    'id': user.id,
                    'username': user.username,
                }
            })
        return jsonify({'status': 'error', 'message': '用户名/密码错误'}), 401

同时auth_routes也进行了更改,确保使用login_user来进行加载用户。

但目前存在无法正确识别登录的问题,虽然已经成功登录,但貌似因为仍鉴别为未登录导致load_user方法无法加载,目前正在定位问题并进行修改。

相关推荐
爱吃火鸡面呀25 分钟前
MySQL DQL 子查询详解:从标量、列、行到表子查询的完整实战
大数据·数据库·mysql
AI科技先锋报43 分钟前
AI数据资产管理平台全景洞察:从治理基座到智能体应用
大数据·人工智能
华奥系科技2 小时前
银发经济浪潮下,智慧养老该如何落地生根
大数据·人工智能
百胜软件@百胜软件2 小时前
百胜软件入选“828精选AI解决方案图谱”,胜券AI助力零售品牌构建专属智能体
大数据·人工智能·零售
大大大大晴天3 小时前
把湖仓一体放进 K8s:Iceberg、Hudi、Paimon 如何重塑云原生大数据架构
大数据
阿里云大数据AI技术3 小时前
从“找得到”到“找得准”:用 Hologres 构建智能达人圈选系统
大数据·人工智能
Databend3 小时前
AI 时代的数据工程挑战:从复杂链路走向统一数据底座
大数据·数据库·云计算
SelectDB技术团队4 小时前
Apache Doris 支持同步/异步物化视图与 ROLLUP,多表加速能力优于 StarRocks
大数据·数据库·doris·技术选型·物化视图·starrock·查询加速
Anita-lee4 小时前
跨境在线旅行社(OTA)国际化运营中的突发服务保障与海外用户体验管理
大数据·人工智能·ux
qiaozhangmenai4 小时前
2026年度南京AI智能体开发定制公司推荐|企业AI Agent服务商选型指南
大数据·人工智能