flask蓝图(Blueprint)框架总结

Blueprint总结

经过一段时间的折腾,蓝图框架迁移终于算是正式完成了,顺带解决了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/<token>')
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实践,不算水课,还是要自己投入时间去学习,感觉大学的课其实也没想象中的那样,有些课如果自己真的感兴趣就认真的去学,并不是为了刷分,而是为了提高自己的综合能力吧。其实有些课不用学,考前大量刷题也可以取得很可观的分数,但真的就是感觉还不如不学来的直接。
mcc

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值