Форум сайта python.su
День добрый, меня зовут Сергей. Третий год пишу веб-приложения на Джаве. Сейчас приболел и решил изучить Пайтон + ГАЕ. За день сбацал простое приложение с CRUD'ом, возник ряд вопросов.
У меня вопрос такой:
Есть вьюха (Django template). Но вьюхе юзер просматривает список новостей, может их скрывать, редактировать и создавать новые.
Этот хандлер готовит данные для вьюхи, выгружает список новостей.
#prepare view data, show news
class AdminPage(webapp.RequestHandler):
def get(self):
message = self.request.get('message')
if not message:
message = 'You are in admin console.'
logging.debug("Did message came -> " + message);
offset = self.request.get('offset')
limit = self.request.get('limit')
news = get_news(offset, limit, False)
values = {
'page': 'admin',
'news': news,
'count': get_news_count(),
'message': message
}
path = os.path.join(os.path.dirname(__file__),'html/admin.html')
self.response.out.write( template.render(path, values) )
class HideNews(webapp.RequestHandler):
def get(self):
key = self.request.get('key')
logging.debug("hide news with key["+key+"]")
hide_news( key )
values = {
'message':'News was hidden'
}
self.redirect("/admin")
class HideNews(webapp.RequestHandler):
def get(self):
key = self.request.get('key')
logging.debug("hide news with key["+key+"]")
hide_news( key )
message = "Новость скрыта".decode('utf-8')
url = "/admin?message=".decode('utf-8')+message
self.redirect(url)
Офлайн
serega_shПомилка виникає не при присвоєнні а в str:
получаю исключение:
self.response.headers = str(absolute_url)
UnicodeEncodeError: ‘ascii’ codec can't encode characters in position
36-42: ordinal not in range(128)
WTF? Я что, не могу utf-8 строку передать в кач-ве параметра у редирект урла?
>>> a = u'абракадабра'
>>> b = str(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-10: ordinal not in range(128)
>>>
Офлайн
serega_sh
Кстати, если значение message задавать латиницей, то все работает отлично.
message = “OLOLO news has been hidden”.decode('utf-8') - работает без исключений.
>>> message = "OLOLO news has been hidden".decode('utf-8')
>>> url = "/admin?message=".decode('utf-8')+message
>>> str(url)
'/admin?message=OLOLO news has been hidden'
>>>
>>>
>>>
>>> message = "Новость скрыта".decode('utf-8')
>>> url = "/admin?message=".decode('utf-8')+message
>>> str(url)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 15-21: ordinal not in range(128)
>>>
Офлайн
Пробую расковырять request:
class HideNews(webapp.RequestHandler):
def get(self):
if isAdminUser( users.get_current_user() ):
key = self.request.get('key')
hide_news( key )
adminPage = AdminPage()
#self.request.GET.items().append( Item('message','Новость спрятана от просмотра'.decode('utf-8')) )
self.request.params.update( message='ololo')
adminPage.initialize(self.request, self.response)
adminPage.get()
self.request.GET.items().append( Item('message','Новость спрятана от просмотра'.decode('utf-8')) )
self.request.params.update( message='ololo')
Офлайн
serega_shпопробуй так
В строке
Код:
self.request.GET.items().append( Item('message','Новость спрятана от просмотра'.decode('utf-8')) )
Я не могу понять, какой тип нужно запихивать в список.
self.request.GET['message'] = 'Новость спрятана от просмотра'.decode('utf-8')
Офлайн
crchemistТак он же мне вроде None должен слева вернуть, сейчас попробую. Еще вопрос, нашел такую статейку про Пайтон:serega_shпопробуй так
В строке
Код:
self.request.GET.items().append( Item('message','Новость спрятана от просмотра'.decode('utf-8')) )
Я не могу понять, какой тип нужно запихивать в список.self.request.GET['message'] = 'Новость спрятана от просмотра'.decode('utf-8')
class AdminPage(webapp.RequestHandler):
def get(self):
user = users.get_current_user()
if isAdminUser( users.get_current_user() ):
logging.debug("self.msg -> " + self.__m_the_property );
message = self.request.get('message')
if not message:
message = 'Вы находитесь в кубрике Администратора.'
offset = self.request.get('offset')
limit = self.request.get('limit')
news = get_news(offset, limit, False)
values = {
'page': 'admin',
'news': news,
'count': get_news_count(),
'message': message,
'nickname' : user.nickname(),
'logoutUrl' : users.create_logout_url("/admin")
}
path = os.path.join(os.path.dirname(__file__),'html/admin.html')
else:
values = {
'loginUrl' : users.create_login_url("/")
}
path = os.path.join(os.path.dirname(__file__),'html/error.html')
self.response.out.write( template.render(path, values) )
def __SetTheProperty(self, value):
self.__m_the_property = value
def __GetTheProperty(self):
return self.__m_the_property
def __DelTheProperty(self):
del self.__m_the_property
TheProperty = property( fget=__GetTheProperty,
fset=__SetTheProperty,
fdel=__DelTheProperty,
doc="The property description.")
def __GetReadOnlyProperty(self):
return "This is a calculated value."
logging.debug("self.msg -> " + self.__m_the_property );
Отредактировано (Март 15, 2009 18:49:01)
Офлайн
crchemistСработало, но не хочет кушать кириллицу. Латиница проходит.serega_shпопробуй так
В строке
Код:
self.request.GET.items().append( Item('message','Новость спрятана от просмотра'.decode('utf-8')) )
Я не могу понять, какой тип нужно запихивать в список.self.request.GET['message'] = 'Новость спрятана от просмотра'.decode('utf-8')
Офлайн
crchemistserega_shПомилка виникає не при присвоєнні а в str:
получаю исключение:
self.response.headers = str(absolute_url)
UnicodeEncodeError: ‘ascii’ codec can't encode characters in position
36-42: ordinal not in range(128)
WTF? Я что, не могу utf-8 строку передать в кач-ве параметра у редирект урла?>>> a = u'абракадабра'
>>> b = str(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-10: ordinal not in range(128)
>>>
self.request.GET['message'] = str('Новость скрыта от просмотра')
Офлайн
serega_shвідступів забагато тому і не бачить ThePrperty (може десь tab нажав?)
TheProperty = property( fget=__GetTheProperty, fset=__SetTheProperty, fdel=__DelTheProperty, doc=“The property description.”)
Отредактировано (Март 15, 2009 19:04:53)
Офлайн
serega_sh
Я только не понял вот чего:
self.request.GET - если у меня в словаре нет ключа ‘message’, мне что, None никогда не вернется? Или Пайтон сам рюхает, что
self.request.GET = str('Новость скрыта от просмотра')
означает, что я хочу завести в словаре озвученную пару ключ-значение?
>>> a = {}
>>> a['message']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'message'
>>> a.get('message')
>>> a.get('message', 'Hello')
'Hello'
>>> a
{}
>>> a['message'] = 'hello world'
>>> a
{'message': 'hello world'}
>>> a.setdefault('message', 'hi')
'hello world'
>>> a.setdefault('message2', 'hi')
'hi'
>>> a
{'message': 'hello world', 'message2': 'hi'}
>>>
Отредактировано (Март 15, 2009 19:06:36)
Офлайн