记录python Flask多路由蓝图使用

项目结构

在这里插入图片描述

app.py

# coding=utf-8
from flask import Flask, request, render_template, session, redirect
from routes.user import user
from routes.table import table
from routes.login import login
from routes.wx import wx
from routes.system.region_setting import region_setting

import redis
from flask_session import Session
from datetime import timedelta

app = Flask(__name__)

app.secret_key = 'wkuss'

app.config['JSON_AS_ASCII'] = False
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = timedelta(seconds=1)
app.config['SESSION_TYPE'] = 'redis'  # session类型为redis
app.config['SESSION_PERMANENT'] = True  # 如果设置为True,则关闭浏览器session就失效。
app.config['SESSION_USE_SIGNER'] = True  # 是否对发送到浏览器上session的cookie值进行加密
app.config['SESSION_KEY_PREFIX'] = 'py_sess:'  # 保存到session中的值的前缀
pool = redis.ConnectionPool(host='localhost', port=6379, db=10)
app.config['SESSION_REDIS'] = redis.Redis(connection_pool=pool)  # 用于连接redis的配置

Session(app)

# 可对实例、配置模板文件路径、静态文路径进行配置
Flask(__name__, static_folder='static', static_url_path='', template_folder='templates')

# 静态文件目录的路径 默认当前项目中的static目录
static_folder = 'static'

# 静态文件目录的url路径 默认不写是与static_folder同名,远程静态文件时复用
static_url_path = None,

# template模板目录, 默认当前项目中的 templates 目录
template_folder = 'templates'

# 配置不需要认证的路由
passUrl = ['/login', '/static', '/wx']


# 使用app.before_request路由过滤,类似java中的添加filter里面的处理
@app.before_request
def before_request():
    path = request.path
    next = isStaticOrLogin = False
    # 不需要认证的路径,登录界面,静态资源等
    for url in passUrl:
        if url in path and path.index(url) == 0:
            isStaticOrLogin = True
            break
    if not isStaticOrLogin:
        # 不是静态资源,判断是否有session
        if 'user' in session:
            next = True
    if not isStaticOrLogin:
        # 不是静态资源,并且next为false,说明没有登录状态,重定向到登录界面
        if not next:
            return redirect('/login/index')


@app.route('/main', methods=['GET'])
def main():
    user = session['user']
    return render_template('main.html', user=user)


@app.route('/index', methods=['GET'])
def index():
    return render_template('index.html')


app.register_blueprint(user, url_prefix='/user')
app.register_blueprint(table, url_prefix='/table')
app.register_blueprint(login, url_prefix='/login')
app.register_blueprint(wx, url_prefix='/wx')
app.register_blueprint(region_setting, url_prefix='/region_setting')

if __name__ == '__main__':
    app.run(port=9000)



login下__init__.py示例

login = Blueprint(‘login’, __name__)这句是app.py中引入这个login路由的关键

# coding=utf-8
from flask import request, render_template, Blueprint, session, redirect
# from config.mongo import mg
from config.db import db
from datetime import timedelta
import json

login = Blueprint('login', __name__)


@login.route('/index')
def index():
    try:
        region = db.select('select * from sys_region')
        data = []
        for r in region:
            print(r)
            obj = {
                "id": r["ID_KEY"],
                "name": r["CD_NM"],
                "fullname": r["fullname"],
                "pid": r["PARENT_ID"],
                "order_id": r["ORDER_CD"],
                "last_mark": r["LAST_MARK"],
                "remark": "",
                "isuse": 1
            }
            data.append(obj)
        # mg.insert_many(data, 'sys_region')
    except Exception as e:
        print(e)
    return render_template('login.html')


@login.route('/submit', methods=['POST'])
def submit():
    form = request.form.to_dict()
    loginname, loginpass = form.get('loginname'), form.get('loginpass')
    user = db.select("select * from plat_user where loginname='%s' and loginpass='%s'" % (loginname, loginpass))
    # user, total = mg.find_page(1, 1, {"loginname": loginname, "loginpass": loginpass}, 'user', None)
    if len(user) > 0 and user[0] is not None:
        user = user[0]
        print(user)
        if user['isUsed'] == 0:
            return {"status": 500, "msg": "该用户已被禁用"}
        session['user'] = user
        session.permanent = True
        # 配置session过期时间
        login.permanent_session_lifetime = timedelta(hours=10)
        return {"status": 200, "success": '/main'}
    else:
        return {"status": 500, "msg": "用户名或密码错误"}


@login.route('/out', methods=['POST', 'GET'])
def out():
    if 'user' in session:
        session.clear()
    if request.method == 'POST':
        return {"status": 200, "out": "/login/index"}
    else:
        redirect('/login/index')

login.html

在这里插入图片描述

在这里又了解到了创建文章时候’__'下划线的使用了,要加\这个斜杠才会显示,我佛了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵东19970820

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值