Класс Python с глобальной переменной сбрасывается сам?

47
6

Python 3.6 на Pythonanywhere с использованием Flask.

Это программа, которая создает веб-страницу 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')

Переменные класса "группы" и "магазины" устанавливаются через @app.route до вызова функции managegroupsscript.py.

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% случаев. В качестве альтернативы, если кто-нибудь узнает, почему программа будет работать иногда, но не все время, это тоже будет полезно.

Я не просто имею эту проблему здесь, но и в других частях программы.

спросил(а) 2018-08-11T23:47:00+03:00 1 год, 3 месяца назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема