• flask框架(十一): 蓝图


    蓝图用于为应用提供目录划分:

    一:上目录结构

    二:上代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    <h1>用户登录</h1>
    <form method="POST">
        <input type="text" name="user"/>
        <input type="submit" value="提交"/>
    </form>
    
    <img src="static/code.png">
    
    <img src="{{ url_for('static',filename='code.png') }}">
    
    </body>
    </html>
    login.html
    # -*- coding: utf-8 -*-
    # @Author : Felix Wang
    # @time   : 2018/7/5 13:54
    
    from flask import Blueprint
    from flask import render_template
    from flask import request
    
    # 创建一个蓝图
    # template_folder表示找模板的时候可以放在自己的目录找
    # url_prefix表示给当前蓝图的url加个前缀,批量操作
    account = Blueprint('account', __name__, url_prefix='/acc',template_folder='tpls')
    
    
    @account.route('/login', methods=['GET', 'POST'], endpoint='account')
    # 注意蓝图的名字和函数名字不能相同
    def login():
        # return render_template('login.html')
        return render_template('login.html')
    
    # 在单个蓝图中定义扩展,只有在当前蓝图中生效
    @account.before_request
    def process_request(*args,**kwargs):
        print('来了')
    account.py
    # -*- coding: utf-8 -*-
    # @Author : Felix Wang
    # @time   : 2018/7/5 13:58
    
    from flask import Blueprint, render_template
    
    blog = Blueprint('blog', __name__)
    
    
    @blog.route('/blog', methods=['GET', 'POST'],endpoint='blog')
    def blog2():
        # return render_template('blog.html')
        return 'blog'
    blog.py
    # -*- coding: utf-8 -*-
    # @Author : Felix Wang
    # @time   : 2018/7/5 13:59
    
    from flask import Blueprint, session, url_for, redirect
    
    user = Blueprint('user', __name__)
    
    
    @user.route('/user', methods=['GET', 'POST'], endpoint='user')
    # 蓝图和函数不能重名,因为重名的话,导入就不知道导入哪个了
    def user2():
        # return render_template('user.html')
        return 'user'
    
    
    # 使用扩展来解决登录问题,比用装饰器好,每次访问之前都执行,使用蓝图之后就不用设置白名单了
    # 因为扩展只对当前蓝图生效
    @user.before_request
    def process_request(*args, **kwargs):
        user = session.get('user_info')
        if user:
            return None
        url = url_for('l1')  # 根据别名生成url
        return redirect(url)
    user.py
    # -*- coding: utf-8 -*-
    # @Author : Felix Wang
    # @time   : 2018/7/5 13:51
    
    from flask import Flask
    
    app = Flask(__name__, template_folder='templates', static_folder='static', static_url_path='/static')
    
    from .views.account import account
    from .views.blog import blog
    from .views.user import user
    
    # 注册蓝图
    app.register_blueprint(account)
    app.register_blueprint(blog)
    app.register_blueprint(user)
    
    
    # 在app这添加扩展,对所有注册的蓝图都生效
    @app.before_request
    def process_request(*args, **kwargs):
        print('来了')
    __init__.py
    # -*- coding: utf-8 -*-
    # @Author : Felix Wang
    # @time   : 2018/7/5 13:50
    
    from pro_flask import app
    
    if __name__ == '__main__':
        app.run()
    run.py

    简单的蓝图(小型的应用程序):下载

    相关链接

  • 相关阅读:
    jquery中$.get()提交和$.post()提交有区别吗?
    src = "security/afafsff/?ip=123.4.56.78&id=45",请写一段代码用正则匹配出ip
    python如何捕获异常
    平衡点问题
    支配点问题:
    python程序中文输出问题怎么解决? 用encode和decode
    介绍一下Python中webbrowser的用法?
    XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
    垃圾回收的优点和原理。并考虑2种回收机制。
    设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
  • 原文地址:https://www.cnblogs.com/felixwang2/p/9268601.html
Copyright © 2020-2023  润新知