added pyramid_mailer to send contact form

This commit is contained in:
2022-05-04 11:29:45 +02:00
parent e7bebbe5e4
commit 58cea3a3a9
9 changed files with 76 additions and 24 deletions

Binary file not shown.

View File

@@ -2,6 +2,7 @@ from pyramid.config import Configurator
from pyramid.authentication import AuthTktAuthenticationPolicy
from pyramid.authorization import ACLAuthorizationPolicy
from pyramid.session import SignedCookieSessionFactory
from pyramid_mailer import mailer_factory_from_settings
from .services.user import groupfinder
@@ -11,14 +12,15 @@ def main(global_config, **settings):
"""
# session factory
my_session_factory = SignedCookieSessionFactory('mGcAJn2HmNH6Hc')
authentication_policy = AuthTktAuthenticationPolicy('wMWvAWMZnp6Lch',
callback=groupfinder, hashalg='sha512', timeout=36000)
authorization_policy = ACLAuthorizationPolicy()
with Configurator(settings=settings,
root_factory='cao_blogr.security.RootFactory',
authentication_policy=authentication_policy,
authorization_policy=authorization_policy) as config:
config.registry['mailer'] = mailer_factory_from_settings(settings)
config.include('pyramid_jinja2')
config.include('.models')
config.include('.routes')

View File

@@ -1,6 +1,6 @@
from wtforms import Form, StringField, TextAreaField, SelectField
from wtforms import IntegerField, PasswordField
from wtforms.validators import InputRequired, Length
from wtforms.validators import InputRequired, Length, Email
from wtforms.widgets import HiddenInput
strip_filter = lambda x: x.strip() if x else None
@@ -25,3 +25,10 @@ class UserCreateForm(Form):
filters=[strip_filter])
password = PasswordField('Mot de passe', validators=[InputRequired(), Length(min=6)])
class ContactForm(Form):
name = StringField('Nom', validators=[InputRequired(), Length(min=1, max=255)],
filters=[strip_filter])
email = StringField('Email', validators=[InputRequired(), Length(min=1, max=255), Email()],
filters=[strip_filter])
comments = TextAreaField('Message', validators=[InputRequired(), Length(min=1)],
filters=[strip_filter])

View File

@@ -31,7 +31,7 @@ class BlogRecordService(object):
@classmethod
def get_last_five(cls, request):
# gest the last 5 items modified
query = request.dbsession.query(BlogRecord)
query = request.dbsession.query(BlogRecord).filter(BlogRecord.topic_id != 'ADM')
query = query.order_by(sa.desc(BlogRecord.edited)).limit(5).all()
return query

View File

@@ -78,7 +78,7 @@
<img src="{{ request.static_url('cao_blogr:static/ni-su.jpg') }}" class="img-circle person" alt="Médiation Sunyata" width="255" height="255">
</a>
<p><b>La Méditation SUNYATA</p></b>
<p>développée par le maître zen Thích Thông Triệt, combine les enseignements essentiels du <b>processus de réalisation et d'illumination du Bouddha</b>, les <b>pratiques des 3 traditions du bouddhisme</b> (Theravāda, Mahayana, le Zen), et les <b>découvertes de la neuro-sciences</b>.</p>
<p>développée par le maître zen Thích Thông Triệt, combine les enseignements essentiels du <b>processus de réalisation et d'illumination du Bouddha</b>, les <b>pratiques des 3 traditions du bouddhisme</b> (Theravāda, Mahayana et Zen), et les <b>découvertes de la neuro-sciences</b>.</p>
</div>
<div class="col-xs-4">
<a href="#demo2">
@@ -169,7 +169,6 @@
<div id="contact">
<br >
<h2 class="text-center">CONTACT</h2>
<p class="text-center"><em>Laissez nous un message!</em></p>
<div class="row">
<div class="col-xs-4">
@@ -179,21 +178,22 @@
</p>
</div>
<div class="col-xs-8">
<p><em>Laissez nous un message!</em></p>
<div class="row">
<form action="{{ request.route_url('home') }}" method="POST" class="form">
<div class="col-xs-6 form-group">
<input class="form-control" id="name" name="name" placeholder="Nom et prénom" type="text" required>
<input class="form-control" id="name" name="name" placeholder="Nom et prénom" required
type="text" value="{{name}}">
</div>
<div class="col-xs-6 form-group">
<input class="form-control" id="email" name="email" placeholder="Email" type="email" required>
<input class="form-control" id="email" name="email" placeholder="Email" required
type="email" value="{{email}} ">
</div>
</div>
<textarea class="form-control" id="comments" name="comments" placeholder="Message" rows="5"></textarea>
<textarea class="form-control" id="comments" name="comments" placeholder="Message" required rows="5"></textarea>
<br>
<div class="row">
<div class="col-xs-12 form-group">
<button class="btn pull-right" type="submit">Envoyer</button>
</div>
</div>
<button class="btn btn-primary" type="submit" name="form.submitted">Envoyer</button>
</form>
</div>
</div>
</div>

View File

@@ -1,9 +1,11 @@
from pyramid.view import view_config
from pyramid.httpexceptions import HTTPFound
from pyramid.security import remember, forget
from pyramid_mailer.message import Message
from ..services.user import UserService
from ..services.blog_record import BlogRecordService
from ..forms import UserCreateForm
from ..forms import UserCreateForm, ContactForm
from ..models.user import User
@@ -22,14 +24,46 @@ def home(request):
dir + '/S18.jpg',
dir + '/S21.jpg',
dir + '/S25.jpg']
page = int(request.params.get('page', 1))
# get the 5 last modified posts
last_five = BlogRecordService.get_last_five(request)
name = ''
email = ''
comments = ''
if 'form.submitted' in request.params :
name = request.params['name']
email = request.params['email']
comments = request.params['comments']
body = """
Bonjour,
L' expéditeur : {0} ( {1} )
a envoyé le message suivant du site "meditation-sunyata.paris"
----- Début du message -----
{2}
----- Fin du message -----
Le site "meditation-sunyata.paris"
""".format(name, email, comments)
message = Message(subject="[MSParis] Message de contact",
sender=request.registry.settings['cao_blogr.admin_email'],
body=body)
message.add_recipient('phuoc@caotek.fr')
mailer = request.registry['mailer']
mailer.send_immediately(message)
message = "Votre message a bien été envoyé au webmestre. Merci de votre intérêt pour notre site"
return {
'page_title': "",
'last_five': last_five,
'car_images': car_images,
'name': name,
'email': email,
'comments': comments,
}

View File

@@ -16,6 +16,11 @@ pyramid.includes =
sqlalchemy.url = sqlite:///%(here)s/cao_blogr.sqlite
cao_blogr.admin_email = cao.thien-phuoc@orange.fr
# Mailer configuration
mail.host = smtp.orange.fr
mail.port = 25
retry.attempts = 3
# By default, the toolbar only appears for clients from IP addresses

View File

@@ -14,6 +14,11 @@ pyramid.default_locale_name = en
sqlalchemy.url = sqlite:///%(here)s/cao_blogr.sqlite
cao_blogr.admin_email = phuoc@caotek.fr
# Mailer configuration
mail.host = localhost
mail.port = 25
retry.attempts = 3
[pshell]

View File

@@ -15,6 +15,7 @@ requires = [
'pyramid_debugtoolbar',
'waitress',
'alembic',
'pyramid_mailer',
'pyramid_retry',
'pyramid_tm',
'SQLAlchemy',
@@ -22,8 +23,6 @@ requires = [
'zope.sqlalchemy',
'wtforms==2.2.1', # form library
'webhelpers2==2.0', # various web building related helpers
'paginate==0.5.6', # pagination helpers
'paginate_sqlalchemy==0.3.0',
'passlib',
]