在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Python/ flask注冊(cè)成功后如何直接跳轉(zhuǎn)到認(rèn)證頁(yè)面?

flask注冊(cè)成功后如何直接跳轉(zhuǎn)到認(rèn)證頁(yè)面?

  1. 現(xiàn)在注冊(cè)玩之后跳轉(zhuǎn)到登錄界面,然后登錄后在進(jìn)行認(rèn)證,這一步我感覺(jué)多余,注冊(cè)成功后怎么直接跳轉(zhuǎn)到認(rèn)證頁(yè)面,并且是當(dāng)前注冊(cè)用戶(hù)登錄?相當(dāng)于注冊(cè)成功后省略登錄認(rèn)證這一步。
登錄:

@auth.route('/login',methods=['GET','POST'])
def login():
    username = request.form.get('username')
    password = request.form.get('password')
    if username:
        user = User.query.filter_by(username=username).first()
        if user is not None and user.verify_passwd(password):
            login_user(user)
            return redirect(url_for('main.index'))
        else:
            error = '用戶(hù)名不存在或密碼錯(cuò)誤.'
            return render_template('auth/login.html',error=error)
    return render_template('auth/login.html',success=success)

注冊(cè):

@auth.route('/register',methods=['GET','POST'])
def register():
    error = []
    if request.method == 'POST':
        try:
            new_user = User(username=request.form.get('username'),email=request.form.get('email'),password=request.form.get('confirm_password'))
            db.session.add(new_user)
            db.session.commit()
        except:
            error.append('用戶(hù)名或郵箱已被注冊(cè).')
            db.session.rollback()
        else:
            token = new_user.tokens()
            send_email(new_user.email, 'Confirm Your Account','auth/email/confirm', user=new_user, token=token)
            global success
            success = '一封認(rèn)證郵件已發(fā)至您的郵箱,登陸后完成認(rèn)證即可訪(fǎng)問(wèn).'
            return  redirect(url_for('auth.login'))
    return render_template('auth/register.html',error=error)


用戶(hù)認(rèn)證:

@auth.route('/confirm/<token>')
@login_required
def confirm(token):
    if current_user.status:
        return redirect(url_for('main.index'))
    if current_user.loosen_tokens(token):
        db.session.commit()
        return redirect(url_for('main.index'))
回答
編輯回答
離夢(mèng)

也許你是想 register 成功后把 login 的事情做完:
即把register()中的

        else:
            token = new_user.tokens()
            send_email(new_user.email, 'Confirm Your Account','auth/email/confirm', user=new_user, token=token)
            global success
            success = '一封認(rèn)證郵件已發(fā)至您的郵箱,登陸后完成認(rèn)證即可訪(fǎng)問(wèn).'
            return  redirect(url_for('auth.login'))

換成login成功的代碼:

        else:
            token = new_user.tokens()
            send_email(new_user.email, 'Confirm Your Account','auth/email/confirm', user=new_user, token=token)
            global success
            success = '一封認(rèn)證郵件已發(fā)至您的郵箱,登陸后完成認(rèn)證即可訪(fǎng)問(wèn).'
            # 登陸
            login_user(new_user)
            return redirect(url_for('main.index'))

但是問(wèn)題是你這里的register成功后還要進(jìn)入一個(gè)郵件認(rèn)證環(huán)節(jié), 如果用戶(hù)沒(méi)有通過(guò)郵件認(rèn)證, 那么用戶(hù)是不能登錄的. 而原來(lái)的代碼return redirect(url_for('auth.login'))讓頁(yè)面重定向到登陸頁(yè)面. 就是為了讓用戶(hù)有時(shí)間去郵件認(rèn)證, 郵件認(rèn)證完畢之后再重新登陸. 所以這個(gè)環(huán)節(jié)必不可少, 除非你讓前端用js一直輪詢(xún), 直到確定通過(guò)了郵件認(rèn)證然后自動(dòng)跳轉(zhuǎn)到main.index.

2017年10月12日 18:22