diff --git a/README.md b/README.md index a03dfb0..962f6db 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ - Install the project in editable mode with its testing requirements. - ` env/bin/pip install -e ".[testing]" ` + ` env/bin/pip install -e ".[testing]" ` - Initialize and upgrade the database using Alembic. diff --git a/cao_blogr.sqlite b/cao_blogr.sqlite index 440ef94..3b7184e 100644 Binary files a/cao_blogr.sqlite and b/cao_blogr.sqlite differ diff --git a/cao_blogr/forms.py b/cao_blogr/forms.py index f442b34..189fd42 100644 --- a/cao_blogr/forms.py +++ b/cao_blogr/forms.py @@ -18,6 +18,9 @@ class BlogCreateForm(Form): class BlogUpdateForm(BlogCreateForm): id = IntegerField(widget=HiddenInput()) +class BlogSearchForm(Form): + criteria = StringField('Critère', validators=[InputRequired(), Length(min=3, max=45)], + filters=[strip_filter]) class UserCreateForm(Form): username = StringField('Nom', [validators.required(), validators.Length(min=1, max=255)], diff --git a/cao_blogr/routes.py b/cao_blogr/routes.py index 6dd30ac..5515009 100644 --- a/cao_blogr/routes.py +++ b/cao_blogr/routes.py @@ -4,7 +4,7 @@ def includeme(config): config.add_route('apropos', '/apropos') config.add_route('blog', '/blog/{id:\d+}/{slug}') config.add_route('blog_edit', '/blog_edit/{id}') - config.add_route('page_search', '/page_search') + config.add_route('blog_search', '/blog_search') config.add_route('login', '/login') config.add_route('logout', '/logout') config.add_route('users', '/users') diff --git a/cao_blogr/services/blog_record.py b/cao_blogr/services/blog_record.py index 5a60560..4afc9d3 100644 --- a/cao_blogr/services/blog_record.py +++ b/cao_blogr/services/blog_record.py @@ -1,6 +1,7 @@ import sqlalchemy as sa import datetime #<- will be used to set default dates on models +from sqlalchemy import or_ from paginate_sqlalchemy import SqlalchemyOrmPage #<- provides pagination from ..models.blog_record import BlogRecord from markdown2 import Markdown @@ -13,6 +14,13 @@ class BlogRecordService(object): query = request.dbsession.query(BlogRecord) return query.order_by(sa.desc(BlogRecord.created)) + @classmethod + def by_criteria(cls, request, criteria): + search = "%{}%".format(criteria) + query = request.dbsession.query(BlogRecord).filter(or_(BlogRecord.title.like(search), + BlogRecord.body.like(search))).all() + return query + @classmethod def by_id(cls, request, _id): query = request.dbsession.query(BlogRecord) diff --git a/cao_blogr/templates/blog_search.jinja2 b/cao_blogr/templates/blog_search.jinja2 new file mode 100644 index 0000000..7fca9af --- /dev/null +++ b/cao_blogr/templates/blog_search.jinja2 @@ -0,0 +1,51 @@ +{% extends "cao_blogr:templates/layout.jinja2" %} + +{% block content %} +
+ +
+
+
+ {{ form.criteria(class_='form-control') }} + + + +
+ {% for error in form.criteria.errors %} +
{{ error }}
+ {% endfor %} +
+
+
+ +
+ {% if items %} + + + + + + + + + + {% for entry in items %} + + + + + + {% endfor %} +
TitreTagsDate
+ + {{ entry.title }} + + {{ entry.tag }}{{ entry.edited.strftime("%d-%m-%Y - %H:%M") }}
+ {% endif %} +
+
+
+ +{% endblock %} diff --git a/cao_blogr/templates/layout.jinja2 b/cao_blogr/templates/layout.jinja2 index d157952..c19a6f2 100644 --- a/cao_blogr/templates/layout.jinja2 +++ b/cao_blogr/templates/layout.jinja2 @@ -32,12 +32,12 @@ - CTP Blog + CAO Blogr