GilcierWeb

Desenvolvedor Web e Freelancer - Os Melhores Links

Fortaleza Ceará Brasil

[email protected]

@GilcierWeb

  • Home
  • O GilcierWeb
  • Serviços
  • Notícias
  • Artigos
  • Vídeos
  • Parceiros
  • Orçamento
  • Contato
Formulário de contato com Python, Flask e envio de e-mail

Formulário de contato com Python, Flask e envio de e-mail

Aprenda a criar um Formulário de contato com Python, Flask e envio de email

O que é Python?

Python é uma linguagem de programação de alto nível,[4] interpretada, de script, imperativa, orientada a objetos, funcional, de tipagem dinâmica e forte. Foi lançada por Guido van Rossum em 1991.[1] Atualmente possui um modelo de desenvolvimento comunitário, aberto e gerenciado pela organização sem fins lucrativos Python Software Foundation. Apesar de várias partes da linguagem possuírem padrões e especificações formais, a linguagem como um todo não é formalmente especificada. O padrão de facto é a implementação CPython.

A linguagem foi projetada com a filosofia de enfatizar a importância do esforço do programador sobre o esforço computacional. Prioriza a legibilidade do código sobre a velocidade ou expressividade. Combina uma sintaxe concisa e clara com os recursos poderosos de sua biblioteca padrão e por módulos e frameworks desenvolvidos por terceiros.

Python é uma linguagem de propósito geral de alto nível, multiparadigma, suporta o paradigma orientado a objetos, imperativo, funcional e procedural. Possui tipagem dinâmica e uma de suas principais características é permitir a fácil leitura do código e exigir poucas linhas de código se comparado ao mesmo programa em outras linguagens. Devido às suas características, ela é principalmente utilizada para processamento de textos, dados científicos e criação de CGIs para páginas dinâmicas para a web. Foi considerada pelo público a 3ª linguagem "mais amada", de acordo com uma pesquisa conduzida pelo site Stack Overflow em 2018,[5] e está entre as 5 linguagens mais populares, de acordo com uma pesquisa conduzida pela RedMonk.[6]

O nome Python teve a sua origem no grupo humorístico britânico Monty Python,[7] criador do programa Monty Python's Flying Circus, embora muitas pessoas façam associação com o réptil do mesmo nome (em português, píton ou pitão).

O que é Flask?

 

Flask é um pequeno framework web escrito em Python e baseado na biblioteca WSGI Werkzeug e na biblioteca de Jinja2. Flask está disponível sob os termos da Licença BSD.

Flask tem a flexibilidade da linguagem de programação Python e provê um modelo simples para desenvolvimento web. Uma vez importando no Python, Flask pode ser usado para economizar tempo construindo aplicações web. Um exemplo de aplicação desenvolvida com Flask é a página da comunidade de desenvolvedores do framework.[2]

É chamado de microframework porque mantêm um núcleo simples mas estendível. Não há uma camada de abstração do banco de dados, validação de formulários, ou qualquer outro componente onde bibliotecas de terceiros existem para prover a funcionalidade. Assim, Flask suporta extensões capazes de adicionar tais funcionalidades na aplicação final. Há uma vasta coleção de bibliotecas para resolver essas questões em Python, isso simplifica o framework e torna sua curva de aprendizado mais suave.

Instalando o Flask

Execute o comando a abaixo no terminal.

pip3 install Flask

Nosso projeto terá a seguinte estrutura.

cd flask-contact
├── app.py
├── form_contact.py
├── __init__.py
└── templates
    ├── application.html
    └── views
        ├── contacts
        │   └── contact.html
        ├── home
        │   └── index.html
        └── partials
            └── _header_top.html

Primeiro criaremos o arquivo base do projeto flask-contact/app.py.

Com o seguinte codigo:

#!/usr/bin/python3
import os
from flask import Flask, render_template, request, redirect

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('views/home/index.html')

if __name__ == "__main__":
    app.run(debug = True)

Criar o arquivo templates/application.html

<!-- templates/application.html -->
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Python e Flask - GilcierWeb</title>

  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS"
    crossorigin="anonymous">
</head>

<body>
  {% include 'views/partials/_header_top.html' %}
  <div class="container">
    <div class="row">
      <div class="col-12">
        <h1>GilcierWeb</h1>

        {% block content %}{% endblock %}

      </div>
    </div>
  </div>

  <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
    crossorigin="anonymous"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js" integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut"
    crossorigin="anonymous"></script>
  <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k"
    crossorigin="anonymous"></script>
</body>

</html>

templates/views/partials/_header_top.html

templates/views/partials/_header_top.html
<nav class="navbar navbar-expand-lg navbar-light bg-light">
  <a class="navbar-brand" href="#">GilcierWeb</a>
  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent"
    aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>

  <div class="collapse navbar-collapse" id="navbarSupportedContent">
    <ul class="navbar-nav mr-auto">

      <li class="nav-item active">    
        <a class="nav-link" href="{{ url_for('index') }}">Home <span class="sr-only">(current)</span></a>
      </li>

      <li class="nav-item">
       <a class="nav-link" href="{{ url_for('contact') }}">Contatos</a>
      </li>
      
    </ul>
    <form class="form-inline my-2 my-lg-0">
      <input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search">
      <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
    </form>
  </div>
</nav>

Vamos criar um arquivo responsável pelo form e validação.

Primeiro instalaremos a lib Flask-WTF.

Execute o comando a seguir.

pip3 install Flask-WTF

Agora podemos criar o form.

flask-contact/ContactForm.py

#flask-contact/ContactForm.py
from flask_wtf import FlaskForm, CSRFProtect
from wtforms import StringField, TextAreaField
from wtforms.validators import DataRequired, Email

csrf = CSRFProtect()

class ContactForm(FlaskForm):
    name = StringField('Nome', validators=[DataRequired('Nome não pode ficar vazio')])
    email = StringField('E-mail', validators=[DataRequired('E-mail não pode ficar vazio'),Email('Informe um email válido')])
    subject = StringField('Assunto', validators=[DataRequired('Assunto não pode ficar vazio')])
    message = TextAreaField('Mensagem', validators=[DataRequired('Mensagem não pode ficar vazio')])

templates/views/contacts/contact.html

templates/views/contacts/contact.html{% extends "application.html" %}

{% block content %}

<h3>Contato</h3>
<form action="{{ url_for('contact') }}" method="POST">
  {{ form.csrf_token }}

  <div class="form-group">
    {{ form.name.label }}
    {{ form.name(class='form-control') }}
    {% for error in form.name.errors %}
    <span style="color: red;">[{{ error }}]</span>
    {% endfor %}
  </div>

  <div class="form-group">
    {{ form.email.label }}
    {{ form.email(class='form-control') }}
    {% for error in form.email.errors %}
    <span style="color: red;">[{{ error }}]</span>
    {% endfor %}
  </div>

  <div class="form-group">
    {{ form.subject.label }}
    {{ form.subject(class='form-control') }}
    {% for error in form.subject.errors %}
    <span style="color: red;">[{{ error }}]</span>
    {% endfor %}
  </div>

  <div class="form-group">
    {{ form.message.label }}
    {{ form.message(class='form-control') }}
    {% for error in form.message.errors %}
    <span style="color: red;">[{{ error }}]</span>
    {% endfor %}
  </div>

  <input type="submit" class="btn btn-success">
</form>

{% endblock %}
templates/views/home/index.html
templates/views/home/index.html
{% extends "application.html" %}
{% block content %}

<section class="jumbotron text-center">
  <div class="container">
    <h1 class="jumbotron-heading">GilcierWeb</h1>
    <p class="lead text-muted">Something short and leading about the collection below—its contents, the creator, etc.
      Make it short and sweet, but not too short so folks don’t simply skip over it entirely.</p>
    <p>
      <a href="#" class="btn btn-primary my-2">Main call to action</a>
      <a href="#" class="btn btn-secondary my-2">Secondary action</a>
    </p>
  </div>
</section>

{% endblock %}
Alteraremos o app.py.

#app.py
...
from form_contact import ContactForm, csrf
...
SECRET_KEY = os.urandom(32)
app.config['SECRET_KEY'] = SECRET_KEY
csrf.init_app(app)

@app.route('/contact', methods=['POST', 'GET'])
def contact():
    form = ContactForm()
    if form.validate_on_submit():        
        print('-------------------------')
        print(request.form['name'])
        print(request.form['email'])
        print(request.form['subject'])
        print(request.form['message'])       
        print('-------------------------')
        send_message(request.form)
        return redirect('/success')    

    return render_template('views/contacts/contact.html', form=form)

@app.route('/success')
def success():
    return render_template('views/home/index.html')
Agora faremos a parte de envio de e-mail.
Primeiro vamos instalar a lib Flask-Mail ela fica responsável pelo envio do e-mail no Flask.

pip3 install Flask-Mail

Voltamos ao arquivo  flask-contact/app.py para implementar o código de envio de email.

#flask-contact/app.py
...
from flask_mail import Mail, Message

mail = Mail()

app.config['MAIL_SERVER']='smtp.gmail.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USERNAME'] = '[email protected]'
app.config['MAIL_PASSWORD'] = '*****'
app.config['MAIL_USE_TLS'] = False
app.config['MAIL_USE_SSL'] = True

mail.init_app(app)

...

def send_message(message):
    print(message.get('name'))

    msg = Message(message.get('subject'), sender = message.get('email'),
            recipients = ['[email protected]'],
            body= message.get('message')
    )  
    mail.send(msg)

Veja como ficou o arquivo app.py.

#app.py
#!/usr/bin/python3
import os
from flask import Flask, render_template, request, redirect
from flask_mail import Mail, Message

from form_contact import ContactForm, csrf

mail = Mail()

app = Flask(__name__)

SECRET_KEY = os.urandom(32)
app.config['SECRET_KEY'] = SECRET_KEY
csrf.init_app(app)

app.config['MAIL_SERVER']='smtp.gmail.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USERNAME'] = '[email protected]'
app.config['MAIL_PASSWORD'] = '*****'
app.config['MAIL_USE_TLS'] = False
app.config['MAIL_USE_SSL'] = True

mail.init_app(app)

@app.route('/')
def index():
    return render_template('views/home/index.html')

@app.route('/contact', methods=['POST', 'GET'])
def contact():
    form = ContactForm()
    if form.validate_on_submit():        
        print('-------------------------')
        print(request.form['name'])
        print(request.form['email'])
        print(request.form['subject'])
        print(request.form['message'])       
        print('-------------------------')
        send_message(request.form)
        return redirect('/success')    

    return render_template('views/contacts/contact.html', form=form)

@app.route('/success')
def success():
    return render_template('views/home/index.html')

def send_message(message):
    print(message.get('name'))

    msg = Message(message.get('subject'), sender = message.get('email'),
            recipients = ['[email protected]'],
            body= message.get('message')
    )  
    mail.send(msg)

if __name__ == "__main__":
    app.run(debug = True)

Para rodar a aplicação execute o comando abaixo no terminal.

python3 app.py flask run

Github do projeto https://github.com/gilcierweb/contact-form-python-flask

Espero ter ajuda alguém, até a próxima.


Últimos artigos

  • Dockerizando uma aplicação ruby on rails com postgresql, redis e vue.js
    Dockerizando uma aplicação ruby on rails com postgresql, redis e vue.js
    Leia Mais
  • Formulário de contato com Python, Flask e envio de e-mail
    Formulário de contato com Python, Flask e envio de e-mail
    Leia Mais
  • Como publicar seu site grátis no Heroku
    Como publicar seu site grátis no Heroku
    Leia Mais
  • Criando um componente reusável com Vue.js
    Criando um componente reusável com Vue.js
    Leia Mais

Últimas notícias

  • Facebook lança versão de MySQL para bancos de dados gigantes
    Facebook lança versão de MySQL para bancos de dados gigantes
    Leia Mais
  • BID lança rede social para pequenas e médias empresas
    BID lança rede social para pequenas e médias empresas
    Leia Mais

Livros e Apostilas

  • Fundamentos de jQuery (jQuery Fundamentals)
  • Apostilando.com
  • LibrosWeb
  • Python para Desenvolvedores

Links

  • Blender 3D
  • Editor de Vídeo Gratuito Lightworks
  • Compactador Gratuito IZArc
  • Editor de imagens Gimp
  • Desenho vetorial com Inkscape
  • Realtime xRTML
  • Codecademy - Aprenda á programar
  • Commerce 10 - Plataforma E-commerce
  • Universojob - Encontre seu Job
  • AkitaOnRails
  • One Bit Code

Diversos

  • Senado Federal
  • Câmara dos Deputados
  • Portal da Transparência
  • Khan Academy - Aprenda Matemática
  • App colab.re
  • deepin Linux OS
  • Calcular Porcentagem

Mapa do site

  • Home
  • O GilcierWeb
  • Serviços
  • Notícias
  • Artigos
  • Vídeos
  • Parceiros
  • Orçamento
  • Contato

Redes Sociais

  • Facebook
  • Twitter
  • Linkedin
  • YouTube
  • Github

[email protected]

@GilcierWeb

Twitter

Tweets de @GilcierWeb

Contatos

* Please note - we do not spam your email.

Copyright © 2021 - All Rights Reserved - gilcierweb.com.br - Desenvolvido por: GilcierWeb - Site criado com o Framework Ruby on Rails

Site melhor visualizado com navegadores modernos como: Firefox, Opera, Chorme, Apple Safari