Files
cao_sunyata/cao_blogr/views/blog.py

113 lines
3.5 KiB
Python

from pyramid.view import view_config
from pyramid.httpexceptions import HTTPNotFound, HTTPFound
from ..models.blog_record import BlogRecord
from ..services.blog_record import BlogRecordService
from ..forms import BlogCreateForm, BlogUpdateForm, BlogSearchForm
@view_config(route_name='blog',
renderer='cao_blogr:templates/blog.jinja2')
def blog(request):
# get post id from request
blog_id = request.matchdict['id']
entry = BlogRecordService.by_id(request, blog_id)
if not entry:
request.session.flash(u"Page non trouvée : %s" % blog_id, 'warning')
return HTTPFound(location=request.route_url('home'))
# just created ? convert body to html
if entry.body_html == '':
BlogRecordService.proc_after_create(request, blog_id)
return {
'page_title': entry.title,
'entry': entry
}
@view_config(route_name='blog_edit',
renderer='cao_blogr:templates/blog_edit.jinja2',
permission='view')
def blog_edit(request):
# get post id from request
blog_id = request.matchdict['id']
url = request.route_url('blog_edit',id=blog_id)
if blog_id == '0':
# create a new post
entry = BlogRecord()
# set default values
entry.tag = 'pyramid'
entry.topic = 'blog'
form = BlogCreateForm(request.POST, entry)
form.tag.choices = [(row.tag, row.title) for row in BlogRecordService.tags]
else:
# modify post
entry = BlogRecordService.by_id(request, blog_id)
if not entry:
request.session.flash(u"Page non trouvée : %s" % blog_id, 'warning')
return HTTPFound(location=request.route_url('home'))
form = BlogUpdateForm(request.POST, entry)
if 'form.submitted' in request.params and form.validate():
if blog_id == '0':
form.populate_obj(entry)
entry.title_url = entry.slug
request.dbsession.add(entry)
return HTTPFound(location=request.route_url('home'))
else:
del form.id # SECURITY: prevent overwriting of primary key
form.populate_obj(entry)
# after update procedure
BlogRecordService.proc_after_update(request, blog_id)
return HTTPFound(location=request.route_url('blog', id=entry.id, slug=entry.slug))
return {
'page_title': entry.title,
'url': url,
'form': form,
'entry': entry,
}
@view_config(route_name='blog_search',
renderer='cao_blogr:templates/blog_search.jinja2')
def blog_search(request):
criteria = ''
form = BlogSearchForm(request.POST)
items = []
if 'form.submitted' in request.params and form.validate():
criteria = request.params['criteria']
# si afficher tous les fiches ?
items = BlogRecordService.by_criteria(request, criteria)
return {
'page_title': "Rechercher",
'form': form,
'items': items,
'criteria': criteria,
}
@view_config(route_name='topic',
renderer='cao_blogr:templates/topic.jinja2')
def topic(request):
topic = request.matchdict['topic']
# get the topic_name
topic_name = BlogRecordService.get_topic_name(request, topic)
# lire toutes les docs du topic
items = BlogRecordService.by_topic(request, topic)
return {
'page_title': topic_name,
'topic': topic,
'items': items,
}