+1

Xây dựng chức năng gửi Email trong ứng dụng Django

Lâu lâu rồi mó mần lại Django đổi gió tý. Hôm nay tôi sẽ cùng các bạn thực hiện xây dựng chức năng gửi Email trong ứng dụng Django. Nào chúng ta cùng bắt đầu nhé. Let's go =))

Cài đặt project

Trước hết chúng ta cần tạo 1 dự án django, và bạn có thể thực hiện điều đó bằng cách mở terminal lên và gõ lệnh sau:

$ django-admin startproject plc_email (tên dự án mà bạn có thể tùy đặt)

Bây giờ chúng ta di chuyển vào thư mục dự án chúng ta vừa tạo

$ cd plc_email

Tạo mới 1 app

Tiếp đến chúng ta tạo 1 app mới bằng lệnh sau:

$ python manage.py startapp send_email

Với lệnh trên chúng ta đã tạo thêm 1 thư mục send_email trong thư mục của dự án

Chỉnh sửa cài đặt của project

Trong bước này bạn hãy mở file settings.py, tiếp đó bạn thiết lập các thông tin này cho đúng cấu hình của bạn mong muốn

EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'Your gmail email'
EMAIL_HOST_PASSWORD = 'Your gmail password'
DEFAULT_FROM_EMAIL = 'Your name'
DEFAULT_TO_EMAIL = 'Your email'

Trong khối INSTALLED_APPS bạn cần thêm dòng sau để sử dụng app send_email:

'send_email.apps.SendEmailConfig'

Sau khi thêm vào thì khối này có nội dung như sau:

INSTALLED_APPS = [
    'send_email.apps.SendEmailConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

Tiếp đến bạn thiết lập đường dẫn static file cho ứng dụng

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

Tạo urls

Chỉnh sửa url trong thư mục plc_email giống như này:

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', include('send_email.urls')),
]

Sau đó bạn tạo thêm file urls.py trong thư mục send_email với nội dung file:

from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^success', views.success, name='success'),
]

Thêm Views

Đi đến file views.py trong thư mục send_email và sửa thành:

from django.shortcuts import render
from django.http import HttpResponse
import django
from django.conf import settings
from django.core.mail import send_mail

def index(request):
    return render(request, 'index.html')

def success(request):
    email = request.POST.get('email', '')
    data = """
        Hello! I am Phuc.
    """
    send_mail('Welcome!', data, "PLC", [email], fail_silently=False)
    return render(request, 'success.html')

Thêm templates

Bây giờ chúng ta tạo thư mục templates trong thư mục send_email. Sau đó tạo 2 file index.htmlsuccess.html trong thư mục templates vừa tạo. Nội dung file index.html:

{% load staticfiles %}
<!DOCTYPE html>
<html>
  <head>
    <!--Import Google Icon Font-->
    <link href="http://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">

    <link type="text/css" rel="stylesheet" href="{% static 'css/style.css' %}"  media="screen,projection"/>
  </head>

  <body>
      <nav>
        <div class="nav-wrapper container">
          <a href="{% url 'index' %}" class="brand-logo">Django</a>
        </div>
      </nav>
    <div class="container login-f">
      <div class="row">
        <form class="col s12 m6 offset-m3" action="/success" id="form" method="POST">
        {% csrf_token %}
          <div class="card blue-grey darken-1">
            <div class="card-content white-text">
              <span class="card-title">Signup for Newsletter</span>
              <div class="input-field col s12">
                <input id="email" type="email" name="email" class="validate">
                <label for="email">Email</label>
              </div>
              <div class="col s12">
                <input type="checkbox" class="filled-in" name="checkbox" id="test5" />
                <label for="test5">Welcome Email</label>
              </div>
            </div>
            <div class="card-action">
              <button type="submit"> SignUp </button>
            </div>
          </div>
        </form>
      </div>
    </div>
    <footer class="page-footer">
      <div class="footer-copyright">
        <div class="container">© 2016 Copyright PLC
        </div>
      </div>
    </footer>
  </body>
</html>

Nội dung file success.html:

{% load staticfiles %}
<!DOCTYPE html>
<html>
  <head>
    <!--Import Google Icon Font-->
    <link href="http://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
    <link type="text/css" rel="stylesheet" href="{% static 'css/style.css' %}"  media="screen,projection"/>

    <!--Let browser know website is optimized for mobile-->
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  </head>

  <body>
      <nav>
        <div class="nav-wrapper container">
          <a href="{% url 'index' %}" class="brand-logo">Django</a>
        </div>
      </nav>
    <div class="container login-f">
      <div class="row">
      <div class="col s12 m6 offset-m3">
        <div class="card-panel teal">
          <span class="white-text">Thank you very much! We have sent you a welcome email.
          <br>
          <br>
          PLC
          </span>
        </div>
      </div>
    </div>
    </div>
    <footer class="page-footer">
      <div class="footer-copyright">
        <div class="container">© 2016 Copyright PLC
        </div>
      </div>
    </footer>
  </body>
</html>

Chạy thử thôi!

Giờ thì chạy thử thôi nào =))

$ python manage.py makemigrations
$ python manage.py migrate
$ python manage.py runserver

Vậy là chúng ta đã xây dựng xong chức năng gửi email trong ứng dụng Django. Hẹn gặp lại các bạn vào bài blog tiếp nhé.

Happy coding!


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.