1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
import colander
import deform.widget
from pyramid.httpexceptions import HTTPFound
from pyramid.view import view_config
pages = {
'100': dict(uid='100', title='Page 100', body='<em>100</em>'),
'101': dict(uid='101', title='Page 101', body='<em>101</em>'),
'102': dict(uid='102', title='Page 102', body='<em>102</em>')
}
class WikiPage(colander.MappingSchema):
title = colander.SchemaNode(colander.String())
body = colander.SchemaNode(
colander.String(),
widget=deform.widget.RichTextWidget()
)
class WikiViews(object):
def __init__(self, request):
self.request = request
@property
def wiki_form(self):
schema = WikiPage()
return deform.Form(schema, buttons=('submit',))
@property
def reqts(self):
return self.wiki_form.get_widget_resources()
@view_config(route_name='wiki_view', renderer='wiki_view.pt')
def wiki_view(self):
return dict(pages=pages.values())
@view_config(route_name='wikipage_add',
renderer='wikipage_addedit.pt')
def wikipage_add(self):
form = self.wiki_form.render()
if 'submit' in self.request.params:
controls = self.request.POST.items()
try:
appstruct = self.wiki_form.validate(controls)
except deform.ValidationFailure as e:
# Form is NOT valid
return dict(form=e.render())
# Form is valid, make a new identifier and add to list
last_uid = int(sorted(pages.keys())[-1])
new_uid = str(last_uid + 1)
pages[new_uid] = dict(
uid=new_uid, title=appstruct['title'],
body=appstruct['body']
)
# Now visit new page
url = self.request.route_url('wikipage_view', uid=new_uid)
return HTTPFound(url)
return dict(form=form)
@view_config(route_name='wikipage_view', renderer='wikipage_view.pt')
def wikipage_view(self):
uid = self.request.matchdict['uid']
page = pages[uid]
return dict(page=page)
@view_config(route_name='wikipage_edit',
renderer='wikipage_addedit.pt')
def wikipage_edit(self):
uid = self.request.matchdict['uid']
page = pages[uid]
wiki_form = self.wiki_form
if 'submit' in self.request.params:
controls = self.request.POST.items()
try:
appstruct = wiki_form.validate(controls)
except deform.ValidationFailure as e:
return dict(page=page, form=e.render())
# Change the content and redirect to the view
page['title'] = appstruct['title']
page['body'] = appstruct['body']
url = self.request.route_url('wikipage_view',
uid=page['uid'])
return HTTPFound(url)
form = wiki_form.render(page)
return dict(page=page, form=form)
|