flask web模板一

单蓝图多视图文件模板

文件目录结构如下
.
├── app
│   ├── __init__.py # 初始化flask核心对象
│   └── web
│   ├── account.py # 和账号相关视图函数定义文件
│   ├── blueprint.py # 蓝图定义文件
│   ├── __init__.py # 将视图函数文件导入,保证视图函数可以注册到蓝图
│   └── user.py # 和用户相关视图函数定义文件
├── config.py # 项目配置文件
├── readme.txt
└── run.py # 项目启动文件

在项目根目录下创建run.py、config.py以及app目录,并且在app目录下创建__init__.py以及web、templates、static三个目录。
run.py内容如下

# -*- coding:utf-8 -*-
# 项目入口文件,负责完成web服务器的启动、配置文件的加载和读取、初始化flask核心对象(或将初始化任务放入app/__init__.py)
# 不将业务相关的代码放在这里

# 从app这个包引入自定义的创建app对象的函数
from app import create_app

app = create_app()

if __name__ == '__main__':
 app.run(host='0.0.0.0', port=80, debug=app.config['DEBUG'])

config.py内容如下

# -*- coding:utf-8 -*-
# 定义项目配置文件


DEBUG = True

app/__init__.py内容如下

# -*- coding:utf-8 -*-
# 初始化flask核心对象

from flask import Flask


# 定义一个函数用来创建app核心对象
def create_app():
    app = Flask(__name__)
    app.config.from_object('config')
    # 调用注册蓝图
    register_blueprint(app)
    return app


#  创建注册蓝图的方法
def register_blueprint(app):
    # 导入蓝图对象
    from app.web.blueprint import web
    app.register_blueprint(web)

在app/web目录下创建__init__.py、blueprint.py、user.py、account.py三个文件
__init__.py内容如下

# -*- coding:utf-8 -*-
# 将视图函数的文件中的视图函数导入
# 因为在web/blueprint.py中只是定义蓝图, 但并没有将web目录下的视图函数文件中定义的视图函数导入
# 视图函数没有导入web/blueprint.py那么,函数注册到蓝图也会失败

# 由于book.py和user.py下的视图函数是没有被导入的因此需要在这里导入,否则还是会提示404视图文件没注册的问题
from app.web import server
from app.web import user
from app.web import account

blueprint.py内容如下

# -*- coding:utf-8 -*-
# 定义蓝图

from flask import Blueprint

# 这里定义一个叫web的通用名称的蓝图,在web/__init__.py中将 web目录下的多个视图函数的文件再注册到web这个蓝图下
web = Blueprint('web', __name__)
# 将web目录下视图函数文件中的视图函数导入的工作交给web/__init__.py

user.py内容如下

# -*- coding:utf-8 -*-
# 视图函数定义文件,定义和用户相关的视图函数

from .blueprint import web
from flask import session, redirect


# @web.route('/user/')
# def user():
#    pass


# 让url前缀为 user的请求都要求登录
# @web.before_request
# def press_request(*args, **kwargs):
#     user = session.get('user_info')
#     if user:
#         return None
#     return redirect('/login/')


@web.route('/user/', methods=['GET', 'POST'])
def user():
    return 'user'

account.py内容如下

# -*- coding:utf-8 -*-
# 视图函数定义文件,和账号相关的视图函数

from .blueprint import web
from flask import request, render_template, redirect, session


@web.route('/register/')
def register():
    pass


@web.route('/login/', methods=['GET', 'POST'])
def login():
    if request.method == "GET":
        return render_template('login.html')
    else:
        user = request.form.get("user")
        pwd = request.form.get("pwd")
        if user == 'zdz' and pwd == '123':
            session['user_info'] = user
            # return redirect('http://www.zhengdazhi.com')
            return redirect('/user/')
        return render_template('login.html', error='用户名或密码错误')


# 为account这个蓝图下的url前缀的请求做扩展
@web.before_request
def press_request(*args, **kwargs):
    print("来了")

在app/templates目录下创建login.html,内容如下

<!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="text" name="pwd">
            <input type="submit" value="登录">{{error}}
        </form>
</body>
</html>

 

发表评论