Уведомления

Группа в Telegram: @pythonsu

#1 Март 7, 2011 22:13:00

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по примеру QuickWiki

Всем привет,
в документации на pylons
http://pylonshq.com/docs/en/1.0/tutorials/quickwiki_tutorial/#the-model
есть пример:

class Page(Base):
__tablename__ = 'pages'
title = Column(Unicode(40), primary_key=True)
content = Column(UnicodeText(), default=u'')
немного ниже данный класс создается от другого предка
class Page(object):

def __init__(self, title, content=None):
self.title = title
self.content = content

def __unicode__(self):
return self.title

__str__ = __unicode__

orm.mapper(Page, pages_table)
Почему по разному описаны классы? Оба описания являются рабочими?
P.S. сильно не пинайте. Плохо английский понимаю…



Офлайн

#2 Март 7, 2011 22:18:36

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по примеру QuickWiki

Позвольте еще спросить:
по ссылке
http://pylonshq.com/docs/en/1.0/tutorials/quickwiki_tutorial/#application-setup
есть две строки:

meta.metadata.bind = meta.engine
model.metadata.create_all(checkfirst=True)
их в какой файл необходимо вставить
model/__init__.py
или
config/environment.py
?



Отредактировано (Март 7, 2011 22:18:56)

Офлайн

#3 Март 7, 2011 22:22:12

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по примеру QuickWiki

сделал

from quickwiki.model import init_model, meta
log = logging.getLogger(__name__)

# disable docutils security hazards:
# http://docutils.sourceforge.net/docs/howto/security.html
SAFE_DOCUTILS = dict(file_insertion_enabled=False, raw_enabled=False)
wikiwords = re.compile(r"\b([A-Z]\w+[A-Z]+\w+)", re.UNICODE)




def init_model(engine):
"""Call me before using any of the tables or classes in the model"""
Session.configure(bind=engine)
meta.metadata.bind = engine
model.metadata.create_all(checkfirst=True)
получаю
C:\project\qw\QuickWiki>paster setup-app development.ini
Running setup_config() from quickwiki.websetup
Traceback (most recent call last):
File "c:\Python25\Scripts\paster-script.py", line 8, in <module>
load_entry_point('pastescript==1.7.3', 'console_scripts', 'paster')()
File "c:\python25\lib\site-packages\pastescript-1.7.3-py2.5.egg\paste\script\c
ommand.py", line 84, in run
invoke(command, command_name, options, args[1:])
File "c:\python25\lib\site-packages\pastescript-1.7.3-py2.5.egg\paste\script\c
ommand.py", line 123, in invoke
exit_code = runner.run(args)
File "c:\python25\lib\site-packages\pastescript-1.7.3-py2.5.egg\paste\script\a
ppinstall.py", line 68, in run
return super(AbstractInstallCommand, self).run(new_args)
File "c:\python25\lib\site-packages\pastescript-1.7.3-py2.5.egg\paste\script\c
ommand.py", line 218, in run
result = self.command()
File "c:\python25\lib\site-packages\pastescript-1.7.3-py2.5.egg\paste\script\a
ppinstall.py", line 456, in command
self, config_file, section, self.sysconfig_install_vars(installer))
File "c:\python25\lib\site-packages\pastescript-1.7.3-py2.5.egg\paste\script\a
ppinstall.py", line 598, in setup_config
mod.setup_app, command, filename, section, vars)
File "c:\python25\lib\site-packages\pastescript-1.7.3-py2.5.egg\paste\script\a
ppinstall.py", line 612, in _call_setup_app
func(command, conf, vars)
File "C:\project\qw\QuickWiki\quickwiki\websetup.py", line 12, in setup_app
load_environment(conf.global_conf, conf.local_conf)
File "C:\project\qw\QuickWiki\quickwiki\config\environment.py", line 50, in lo
ad_environment
init_model(engine)
File "C:\project\qw\QuickWiki\quickwiki\model\__init__.py", line 24, in init_m
odel
meta.metadata.bind = engine
AttributeError: 'module' object has no attribute 'metadata'



Офлайн

#4 Март 7, 2011 23:00:08

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Вопрос по примеру QuickWiki

Для начала почитайте документацию по sqlalchemy, а потом уже крутите ее к pylons.



Офлайн

#5 Март 8, 2011 14:03:30

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по примеру QuickWiki

Андрей Светлов
Для начала почитайте документацию по sqlalchemy, а потом уже крутите ее к pylons.
Спасибо за совет. Подскажите пожалуйста возможно ли pylons использовать для доступа к базам данным без ORM sqlalchemy? Или тогда лучше изучать другой фрэймворк? Если другой то какой?
Кстати в комментариях упоминается что код в учебнике устарел
http://pylonshq.com/docs/en/1.0/tutorials/quickwiki_tutorial/
Исправления опубликованы тут
http://spandexbob.posterous.com/pylons-tutorial
P.S. В последних комментариях упоминался фрэймворк Bottle.



Отредактировано (Март 8, 2011 14:30:34)

Офлайн

#6 Март 8, 2011 15:32:15

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Вопрос по примеру QuickWiki

http://pylonsproject.org/ + sqlalchemy. Сугубо личное мнение.



Офлайн

#7 Март 8, 2011 17:56:08

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по примеру QuickWiki

Андрей Светлов
http://pylonsproject.org/ + sqlalchemy. Сугубо личное мнение.
Спасибо!



Офлайн

#8 Март 8, 2011 20:49:54

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по примеру QuickWiki

При открытии адреса
http://127.0.0.1:5000/pages/show/FrontPage
Получаю
&#8669; TypeError: show() takes exactly 2 arguments (1 given)
Код как в учебнике, кто нибудь может подсказать почему он требует 2 аргумента (self - это ведь указатель на сам объект)?

class PagesController(BaseController):

def index(self):
c.titles = [page.title for page in self.page_q.all()]
print c.titles
return render('/pages/index.mako')


def __before__(self):
self.page_q = Session.query(Page)

def show(self, title):
page = self.page_q.filter_by(title=title).first()
c.title = title
if page:
c.content = page.get_wiki_content()
return render('/pages/show.mako')
elif wikiwords.match(title):
#c.title = ''
#c.content = ''
return render('/pages/new.mako')
abort(404)
from routes import Mapper

def make_map(config):
"""Create, configure and return the routes Mapper"""
map = Mapper(directory=config['pylons.paths']['controllers'],
always_scan=config['debug'])
map.minimization = False
map.explicit = False

# The ErrorController route (handles 404/500 error pages); it should
# likely stay at the top, ensuring it can always be resolved
map.connect('/error/{action}', controller='error')
map.connect('/error/{action}/{id}', controller='error')
# CUSTOM ROUTES HERE
map.connect('/{controller}/{action}')
map.connect('/{controller}/{action}/{id}')


map.connect('home', '/', controller='pages', action='show',
title='FrontPage')
map.connect('pages', '/pages', controller='pages', action='index')
map.connect('show_page', '/pages/show/{title}', controller='pages',
action='show')
map.connect('edit_page', '/pages/edit/{title}', controller='pages',
action='edit')
map.connect('save_page', '/pages/save/{title}', controller='pages',
action='save', conditions=dict(method='POST'))
map.connect('delete_page', '/pages/delete', controller='pages',
action='delete')

# A bonus example - the specified defaults allow visiting
# example.com/FrontPage to view the page titled 'FrontPage':
map.connect('/{title}', controller='pages', action='show')

return map



Офлайн

#9 Март 10, 2011 20:05:17

qman
От:
Зарегистрирован: 2007-07-02
Сообщения: 444
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос по примеру QuickWiki

Для чайников интересующихся QuickWiki из pylons от чайника

Устанавливаем setuptools из http://pypi.python.org/pypi/setuptools
Устанавливаем
easy_install QuickWiki
Не обязательно устанавливаем yolk
Убеждаемся что QuickWiki установлено
yolk -l
Далее создаем конфиг файл
paster make-config QuickWiki test.ini
создаем базу данных
paster setup-app test.ini

запускаем приложение
paster serve test.ini

исходники искать в
c:\Python25\Lib\site-packages\
P.S. у меня в c:\Python25\Lib\site-packages\QuickWiki-0.1.8dev-py2.5.egg\
P.P.S. профи - сильно не пинайте.



Отредактировано (Март 10, 2011 20:06:40)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version