Форум сайта python.su
from __future__ import unicode_literals import json import sys import web class hello: def GET(self): return 'Hello %s' % var urls = ( '/', 'hello' ) if __name__ == "__main__": var = 1 print globals().keys() app = web.application(urls, globals()) app.run()
File ".py", line 23, in GET
return 'Hello %s' % var
NameError: global name 'var' is not defined
Отредактировано pyhton (Июнь 22, 2015 01:17:04)
Офлайн
И вот это вот что за хрень?
from __future__ import unicode_literals import web print "bems" class hello: # /asdf -> name=asdf def GET(self): return 'Hello' urls = ( '/', 'hello' ) if __name__ == "__main__": app = web.application(urls, globals()) app.run()
bems
http://0.0.0.0:8080/
bems
127.0.0.1:1595 - - [22/Jun/2015 00:29:11] "HTTP/1.1 GET /" - 200 OK
Отредактировано pyhton (Июнь 22, 2015 01:30:35)
Офлайн
pyhton
class hello: def GET(self, var): return 'Hello %s' % web.websafe(var) urls = ( '/', 'hello' )
Офлайн
ayb, прошу прощения, но ты сам-то это проверял?
Finally, we pass i.name through the web.websafe function before returning it to the user. If your page is being served as HTML, rather than text, then this is an important security step to protect against cross-site scripting attacks. (As we will see, web.py's form templates offer built-in protection to those attacks).
Офлайн
pyhton
Проблема в том, что webpy практически никто не использует. На этом форуме таких можно по-пальцам пересчитать. И то, они скорее не используют, а просто пробовали. Поэтому специально ставить webpy, чтобы проверить и поймать Вашу ошибку вряд-ли кто-то будет. Есть надежда только на кого-то, кто использовал этот фреймверк больше чем просто для “попробовать”…
Офлайн
pyhton
ayb, прошу прощения, но ты сам-то это проверял?
from __future__ import unicode_literals import json import sys import web class hello: def GET(self): return 'Hello %s' % var urls = ( '/', 'hello' ) var = 1 if __name__ == "__main__": app = web.application(urls, globals()) app.run()
Офлайн
4kpt_III
Есть же логика работы питона. Я то думал что знаю питон, но, сука, блядь, не могу понять, почему из if __name__ == “__main__” в globals() есть var, а из GET() его в globals() нет. В этом и есть вся сила питона - один мудак может заставить тебя усомниться в том, что ты знаешь язык? Почему я с userjs, не зная ни языка, ни браузеров, с помощью гугла и матери худо-бедно разобрался за день, а с таким из себя хорошим питоном завис на ровном месте на 1,5 дня? И что, сука, интересно, у меня была другая программа, которая тоже использовала web.py, инициализировала глобальные переменные в if __name__ == “__main__”:, и, сука, работала! Ну что за блядство? Как можно вообще ухитриться так сделать?
Похоже, самым простым решением будет переход на flask. А web.py я юзал потому что у меня json api и шаблоны-маблоны мне нафиг не нужны, мне нужен был примитивнейший фреймвёрк.
Офлайн
<offtop>
ayb
Что это у тебя на аватаре?
</offtop>
Отредактировано pyhton (Июнь 23, 2015 00:16:28)
Офлайн
pyhton
В этом и есть вся сила питона - один мудак может заставить тебя усомниться в том, что ты знаешь язык?
# file test.py from test_1 import Foo f = Foo() if __name__ == "__main__": f.foo()
# file test_1.py class Foo: def foo(self): print var if __name__ == "__main__": var = 4
Офлайн
FishHook
А трижды мудак тот, кто ни разу не видел программы на web.py или похожих фреймверках.
Я прекрасно знаю, как работает импорт в питоне. И оно и без if __name__ глючило.
Отредактировано pyhton (Июнь 23, 2015 07:01:15)
Офлайн