带全局变量的Python类会自行重置吗?

时间:2018-08-11 20:47:07

标签: class flask module global-variables python-3.6

使用Flask的Pythonanywhere上的Python 3.6。

这是一个程序,它创建一个HTML网页,允许用户通过HTML滑块选择和取消选择某些选项。

mainprogram.py

class gv():       #gv stands for global variable
    --REDACTED--
    currentuser = 'if you see this, it is not working'
    stores = 'if you see this, it is not working'     
    groups = 'if you see this, it is not working'
    --REDACTED--

@app.route('/welcomerouting', methods=['GET', 'POST'])
def welcomerouteing():

    gv.currentuser = login.login().get(request.form.get('username')).get('clientid')
    gv.stores = userdata.get(gv.currentuser).get('stores')
    gv.groups = userdata.get(gv.currentuser).get('groups')
    --REDACTED--
    managegroupsscript.managegroupscreatehtml(gv.currentuser)
    --REDACTED--
    return render_template('managegroups.html')

在调用managegroupsscript.py函数之前,通过@ app.route设置类变量“ groups”和“ stores”。

managegroupsscript.py

import mainprogram as mp
from datetime import datetime, timedelta


def managegroupscreatehtml(currentuser):
#returns an attribute from a user profile

    with open(str(mp.devcheck())+'/orderguideproject/templates/managegroups.html', 'w') as f1:
        f1.write('<html>')
        f1.write("""
                <style>

                    .switch {
                      position: relative;
                      display: inline-block;
                      width: 60px;
                      height: 34px;
                    }

                    .switch input {display:none;}

                    .slider {
                      position: absolute;
                      cursor: pointer;
                      top: 0;
                      left: 0;
                      right: 0;
                      bottom: 0;
                      background-color: #ccc;
                      -webkit-transition: .4s;
                      transition: .4s;
                    }

                    .slider:before {
                      position: absolute;
                      content: "";
                      height: 26px;
                      width: 26px;
                      left: 4px;
                      bottom: 4px;
                      background-color: white;
                      -webkit-transition: .4s;
                      transition: .4s;
                    }

                    input:checked + .slider {
                      background-color: #2196F3;
                    }

                    input:focus + .slider {
                      box-shadow: 0 0 1px #2196F3;
                    }

                    input:checked + .slider:before {
                      -webkit-transform: translateX(26px);
                      -ms-transform: translateX(26px);
                      transform: translateX(26px);
                    }

                    /* Rounded sliders */
                    .slider.round {
                      border-radius: 34px;
                    }

                    .slider.round:before {
                      border-radius: 50%;
                    }
                </style>
                """)
        f1.write('<body><form action="/adminmainmenu" method="post"><div class="button"><button type="submit" name="back">Back</button></form><form action="/commitgroups" method="post"><table width="100%" border=".1">')

        #writes group names
        f1.write('<tr><td></td><td></td>')
        for x in mp.gv.groups:
            f1.write('<td>'+x+'</td>')
        f1.write('</tr>')

        for x in mp.itemtable.query.order_by(mp.asc(mp.itemtable.iid)):
            f1.write('<tr>')
            f1.write('<td width=8%>'+str(x.iid)+' '+x.vendor+'</td>')
            f1.write('<td width=25%>'+x.description+'</td>')

            for y in mp.gv.groups:
                f1.write('<td>')
                if y in x.groups.split(','):                          #these checkboxes return 'on' and None
                    f1.write('<label class="switch"><input type="checkbox" checked name='+y+x.itemnumber+'><span class="slider round"></span></label></td>')
                else:
                    f1.write('<label class="switch"><input type="checkbox" name='+y+x.itemnumber+'><span class="slider round"></span></label></td>')

        f1.write('<tr><td><div class="button"><button type="submit" name="submitgroups">Submit Groups</button></div></td></tr>')
        f1.write('</form></table></body></html>')

问题在于,大约有10%的时间在程序运行时,显示“如果您看到它,则它不起作用”文本,而不是在运行 managegroups之前将类变量设置为什么。 py

我实际上只是一个业余编码员,试图改善自己的业务,因此,如果有结构上更好的方法可以通过类有效地创建全局变量或半全局变量,我当然愿意尝试以其他方式。我只需要找到一种方法来执行此操作,而不会在大约10%的时间里将变量随机“重置”。另外,如果有人知道为什么该程序有时但并非始终都能正常工作,那也会很有用。

我不仅在这里遇到这个问题,而且在程序的其他部分也有这个问题。

0 个答案:

没有答案