繁体   English   中英

Python Flask仅运行一次代码

[英]Python Flask Only Run Code Once

我试图像这样设置一个全局变量:

    # -*- coding: utf8 -*-
from flask import Flask, render_template,redirect,flash, url_for, session, request
from sqlalchemy.sql import text
from sqlalchemy.orm import aliased, Query
from sqlalchemy import exc
from flask_bootstrap import Bootstrap
from .forms import *


import zlib
#from sqlalchemy.orm.query import limit, order_by
from dbmodel import *


app = Flask(__name__)
app.secret_key = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT'
Bootstrap(app)

MAX_ITEMS=50
MAX_ZIPS=5
MAX_ORDERS=20


clientMaxSQL="SELECT * FROM CLIENT WHERE 1"

engine, dbsession = dbconnect() 

@app.route("/clientRegister",methods=['GET', 'POST'])
def clientRegister():
        form = ClientQuery()

        global clientMaxSQL
        flash('maxSql at start %s ' %(clientMaxSQL))
        if form.reset.data == "True":
                flash('RESET TABLE FILTERS')
                clientMaxSQL="SELECT * FROM CLIENT WHERE 1"

        sql = clientMaxSQL
        if form.validate_on_submit():
                if len(form.compareVal.data.strip()) > 0 and ( any(c.isalpha() for c in form.compareVal.data) or any(c.isdigit() for c in form.compareVal.data)):
                        sql = sql + " AND " + form.columnSelection.data + form.comparisonSelection.data + "'" +form.compareVal.data+"'"

        start=int(request.args.get('start', '0'))
        prev=start-MAX_ITEMS
        nextStart = start + MAX_ITEMS
        tmpSQL = clientMaxSQL
        clientMaxSQL = sql
        sql = sql + " LIMIT " + str(start)+","+str(nextStart)
        try:
                clients = engine.execute(sql)
                maxStart=engine.execute(clientMaxSQL).rowcount
                flash('Attempting Query: %s' %(sql))
        except:
                flash('Invalid Comparison of %s' %(form.compareVal.data))
                sql = tmpSQL + " LIMIT " + str(start)+","+str(nextStart)
                clientMaxSQL=tmpSQL
                clients = engine.execute(sql)
                maxStart=engine.execute(clientMaxSQL)
        flash('maxSql at end %s ' %(clientMaxSQL))
        return render_template("clientRegister.html",form=form,maxStart=maxStart,clients=clients,start=start, prev=prev,nextStart=nextStart)

我得到一些奇怪的结果。 似乎该语句(在所有函数定义上方声明)偶尔偶尔执行一次。 这可能吗? 对我的Web应用程序来说,这只能运行一次是非常必要的,否则我将丢失查询的当前状态。

在程序中添加了更改变量的所有代码。 它正在自行重置。

@app.before_first_request装饰器与函数配合使用,以使其仅运行一次

如:

@app.before_first_request
def function_to_run_only_once():
     #your statement(s)

这应该确保您所说的语句在程序的整个生命周期中仅执行一次

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM