Найти - Пользователи
Полная версия: [web.py] что за хрень?
Начало » Web » [web.py] что за хрень?
1 2
pyhton
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
И вот это вот что за хрень?

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
Почему bems печатает 2 раза??
ayb
pyhton

В первом случае у тебя в контексте запроса не определена переменная var. Вот тут вроде бы все предельно ясно. В твоем случае :
class hello:
    def GET(self, var):
        return 'Hello %s' % web.websafe(var)
urls = (
    '/', 'hello'
)

pyhton
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).

И почему она должна быть определена в контексте запроса? Почему обработчик запроса не видит глобальную переменную (ИЧСХ, в другой программе он ее прекрасно видит)? Просьба перед следующим ответом проверить его (web.py ставится через pip install web.py)
4kpt_III
pyhton
Проблема в том, что webpy практически никто не использует. На этом форуме таких можно по-пальцам пересчитать. И то, они скорее не используют, а просто пробовали. Поэтому специально ставить webpy, чтобы проверить и поймать Вашу ошибку вряд-ли кто-то будет. Есть надежда только на кого-то, кто использовал этот фреймверк больше чем просто для “попробовать”…
ayb
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()

Я не могу объяснить почему так происходит.

pyhton
4kpt_III
Есть же логика работы питона. Я то думал что знаю питон, но, сука, блядь, не могу понять, почему из if __name__ == “__main__” в globals() есть var, а из GET() его в globals() нет. В этом и есть вся сила питона - один мудак может заставить тебя усомниться в том, что ты знаешь язык? Почему я с userjs, не зная ни языка, ни браузеров, с помощью гугла и матери худо-бедно разобрался за день, а с таким из себя хорошим питоном завис на ровном месте на 1,5 дня? И что, сука, интересно, у меня была другая программа, которая тоже использовала web.py, инициализировала глобальные переменные в if __name__ == “__main__”:, и, сука, работала! Ну что за блядство? Как можно вообще ухитриться так сделать?

Похоже, самым простым решением будет переход на flask. А web.py я юзал потому что у меня json api и шаблоны-маблоны мне нафиг не нужны, мне нужен был примитивнейший фреймвёрк.
pyhton
<offtop>
ayb
Что это у тебя на аватаре?
</offtop>
FishHook
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

Два вопроса:
1. Возникнет ли ошибка, если я запущу на выполнение файл test.py?
2. Так и кто мудак?
pyhton
FishHook
А трижды мудак тот, кто ни разу не видел программы на web.py или похожих фреймверках.

Я прекрасно знаю, как работает импорт в питоне. И оно и без if __name__ глючило.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB