Study_microblog笔记Part 7--用blueprint进行应用架构的重新构建

作为一个项目,我们总要考虑到Flask应用如何在持续增长中不会变得混乱和难以管理。我尝试适用于大型应用的一些模式,并且为了演示他们,我将对Microblog项目的结构进行一些更改,目标是使代码更易于维护和组织。

blueprint

运用blueprint将混杂在一起的视图函数、表单、模板等按照不同的功能模块区分出来,提高复用性。
结构如下:
在这里插入图片描述
与常用的blueprint不同的地方在于,我的目录组织架构按照视图以及表单进行组织,视图目录下有__init__.py,这是把所有的视图按照不同的名称进行组织起来的一个包,如app/views/auth.py文件:

from flask import render_template,flash,redirect,url_for,request,Blueprint
from app import app,db
from app.forms.auth import LoginForm,RegistrationForm
from app.models import User
from flask_login import current_user,login_user,logout_user,login_required
from werkzeug.urls import url_parse


# ...

auth=Blueprint('auth',__name__)

@auth.route('/register', methods=['GET', 'POST'])
def register():
    if current_user.is_authenticated:
        return redirect(url_for('main.index'))
    form = RegistrationForm()
    if form.validate_on_submit():
        user = User(username=form.username.data, email=form.email.data)
        user.set_password(form.password.data)
        db.session.add(user)
        db.session.commit()
        flash('Congratulations, you are now a registered user!')
        return redirect(url_for('auth.login'))
    return render_template('auth/register.html', title='Register', form=form)



@auth.route('/logout')
def logout():
    logout_user()
    return redirect(url_for('main.index'))


@auth.route('/login', methods=['GET', 'POST'])
def login():

    if current_user.is_authenticated:
        return redirect(url_for('main.index'))

    form = LoginForm()
    if form.validate_on_submit():
        user = User.query.filter_by(username=form.username.data).first()
        if user is None or not user.check_password(form.password.data):
            flash('Invalid username or password')
            return redirect(url_for('auth.login'))
        login_user(user, remember=form.remember_me.data)
        next_page = request.args.get('next')
        if not next_page or url_parse(next_page).netloc != '':
            next_page = url_for('main.index')
        return redirect(next_page)

    return render_template('auth/login.html', title='Sign In', form=form)

在文件的第1行用Blueprint创建auth,通过包文件app/views/init.py进行引用。

from .auth import auth
from .main import main

在app/init.py进行引入并注册蓝图。

/****
from app.views import *
app.register_blueprint(main)
app.register_blueprint(auth,url_prefix='/auth')
/****

现在试一下吧!
通过这种目录架构,我们可以把视图、表单等各种文件按照类别组织起来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值