这个地方就用到了蓝本,因为使用了工厂函数必须要用蓝本把路由注册到app里
获取前端的数据为JSON,返回的时候也是一个json信息
auth.py
import functools from flask import ( Blueprint, g, jsonify, request, session ) from werkzeug.security import check_password_hash, generate_password_hash from app.db import get_db bp = Blueprint('auth', __name__, url_prefix='/auth') @bp.route('/register', methods=('GET', 'POST')) def register(): if request.method == 'POST': stu_id = request.json['stu_id'] username = request.json['username'] password = request.json['password'] db = get_db() error = None if not username: error = 'Username is required.' elif not password: error = 'Password is required.' elif db.execute( 'SELECT stu_id FROM user WHERE username = ?', (username,) ).fetchone() is not None: error = 'User {} is already registered.'.format(username) return jsonify({'msg': 'error'}) if error is None: db.execute( 'INSERT INTO user (stu_id,username, password) VALUES (?, ?, ?)', (stu_id, username, generate_password_hash(password)) ) db.commit() return jsonify({'msg': 'Register success.'}) return jsonify({'msg': None}) @bp.route('/login', methods=('GET', 'POST')) def login(): if request.method == 'POST': stu_id = request.json['stu_id'] password = request.json['password'] db = get_db() error = None user = db.execute( 'SELECT * FROM user WHERE stu_id = ?', (stu_id,) ).fetchone() if user is None: error = 'Incorrect stu_id.' elif not check_password_hash(user['password'], password): error = 'Incorrect password.' return jsonify({'err': 'login failed'}) if error is None: session.clear() session['username'] = user['username'] return jsonify({'msg': 'login success.'}) return jsonify({'msg': None}) @bp.before_app_request def load_logged_in_user(): stu_id = session.get('stu_id') if stu_id is None: g.user = None else: g.user = get_db().execute( 'SELECT * FROM user WHERE stu_id = ?', (stu_id,) ).fetchone() @bp.route('/logout') def logout(): session.clear() return jsonify({'msg': 'logout success'})
到这里就完成了登录注册,后面会记录学习过程中的收获