经过一段时间的折腾,蓝图框架迁移终于算是正式完成了,顺带解决了email认证过程中关于激活界面的一个问题,在其中学到了很多,这里写下了当作一种分享吧。
解决email激活函数无法传递toekn参数的问题
from . import auth
from flask import render_template , url_for, session, redirect
from ..models import User , Login_Form , Register_Form , Article
from flask_login import current_user , login_required , login_user , logout_user , user_logged_in
from ..func import *
from .func import *
@auth.route('/')
def index():
return render_template('register.html')
@auth.route('/register',methods=['POST','GET'])
def register():
if current_user.is_authenticated:
dic=make_json_dic(301,user_username='annoyance',date=mcc_time(),info=mcc_info('you have already authenticated.'))
return jsonify(dic)
else:
if request.method=='POST':
form=Register_Form()
if form.mcc_validate():
#if form.validate_on_submit():
name=form.username.data
if form.password.data==form.re_password.data:
password=form.password.data
email=form.email.data
if db_user_auth(name,password)==False:
if mail_auth(email):
user=User()
user.name=name
user.password=password
user.email=email
db.session.add(user)
db.session.commit()
token = user.generate_activate_token()
# 发送激活邮件到注册邮箱
send_mail(email, '账户激活', 'auth\\templates\\Life_Is_Strange_Artwork_5.jpg', token=token,username=name)
# 提示用户下一步操作
return render_template('login.html')
else:
dic=make_json_dic(301,user_username=name,date=mcc_time(),info=mcc_info('email type erro.'))
return jsonify(dic)
#return render_template('register.html')
else:
dic=make_json_dic(301,user_username=name,date=mcc_time(),info=mcc_info('the user is registered .'))
return jsonify(dic)
#return render_template('register.html')
else:
dic=make_json_dic(301,user_username=name,date=mcc_time(),info=mcc_info('the password is not same.'))
return jsonify(dic)
#return render_template('register.html')
else:
dic=make_json_dic(301,user_username=name,date=mcc_time(),info=mcc_info('the form is not complete. '))
return jsonify(dic)
#return render_template('register.html')
else:
dic=make_json_dic(301,date=mcc_time(),info=mcc_info('the request is not supported.'))
return jsonify(dic)
#return render_template('register.html')
@auth.route('/login',methods=['POST','GET'])
def login():
if current_user.is_authenticated:
mcc_print("you are authenticated")
dic=make_json_dic(200,user_username=current_user.name,date=mcc_time(),info='current user is authenticated.')
return jsonify(dic)
else:
form=Login_Form()
dic=form_analysis(form)
if dic!=None:
if request.method=='POST':
username=dic['username']
password=dic['password']
user=User.query.filter_by(name=username).first()
if user is not None and password==user.password and user.confirmed==True:
session["username"]=username
session["password"]=password
login_user(user,True)
dic=make_json_dic(200,user_username=current_user.name,date=mcc_time(),info=mcc_info('current user is login.'))
return jsonify(dic)
else:
dic=make_json_dic(301,user_username=current_user.name,date=mcc_time(),info=mcc_info('authenticate fail.'))
return jsonify(dic)
else:
dic=make_json_dic(301,user_username=current_user.name,date=mcc_time(),info=mcc_info('authenticate fail.'))
return render_template('login.html')
else:
dic=make_json_dic(404)
return render_template('login.html')
@auth.route('/logout',methods=['POST','GET'])
def logout():
if current_user.is_authenticated:
logout_user()
dic=make_json_dic(200,user_username=current_user.name,date=mcc_time(),info=mcc_info('logout success.'))
return render_template('index.html')
else:
dic=make_json_dic(301,user_username=current_user.name,date=mcc_time(),info=mcc_info('you have login.'))
return render_template('login.html')
@auth.route('/activate/' )
def activate(token):
if token !=None:
if User.check_activate_token(self=current_user,token=token):
dic=dict()
dic['info']='activate success'
return jsonify(dic)
else:
dic=dict()
dic['info']='activate fail'
return jsonify(dic)
else:
mcc_print('none')
首先可以看出来,代码基本上是分离前后端的,只不过我为了测试加入了一些前端的代码,这次主要想说的是关于activate这个路由,最初是用的是许多博客中采用的
@auth.route(’/activate/’)
def activate(token):
if token !=None:
if User.check_activate_token(token=token):
dic=dict()
dic[‘info’]=‘activate success’
return jsonify(dic)
else:
dic=dict()
dic[‘info’]=‘activate fail’
return jsonify(dic)
else:
mcc_print(‘none’)
就是这里的token,我在本地测试是通不过的,但改成 if User.check_activate_token(token=token,self=current_user)之后,token是可以正确传递给check_activate_token函数的。
计算方法前段时间真的是有点放松了,但越学到后来越觉得计算方法没讲授的那样无聊,课程其实整合了特别多的理论知识,而且结合matlab实践,不算水课,还是要自己投入时间去学习,感觉大学的课其实也没想象中的那样,有些课如果自己真的感兴趣就认真的去学,并不是为了刷分,而是为了提高自己的综合能力吧。其实有些课不用学,考前大量刷题也可以取得很可观的分数,但真的就是感觉还不如不学来的直接。