صفحة إتصل بنا بإستخدام جانغو

لنقم ببناء نموذج اتصال بسيط يرسل بريدًا إلكترونيًا من خلال موقع ويب Django .

يمكننا الاستفادة من  email support المدمج في Django لجعل هذا الأمر أسهل ثم إرسال رسائل البريد الإلكتروني بشكل حقيقي باستخدام خدمة البريد الإلكتروني SendGrid.

الإعدادات الأولية

الخطوة الأولى هي إنشاء دليل مخصص للأكواد . و كما أقول دائما فإن المكان المناسب هو سطح المكتب لسهولة الوصول إلى الأكواد.

من سطر الأوامر، قم بتنفيذ الأوامر التالية للانتقال إلى سطح المكتب وإنشاء مجلد جهات اتصال جديد.

# Windows
$ cd onedrive\desktop\code
$ mkdir helloworld
$ cd helloworld

يمكننا الآن إنشاء وتنشيط بيئة افتراضية تسمى  .venv ثم قم بتثبيت أحدث إصدار من Django.

# Windows
$ python -m venv .venv
$ .venv\Scripts\Activate.ps1
(.venv) $ python -m pip install django

بعد ذلك، سنقوم بإنشاء مشروع Django جديد يسمى  config وداخله تطبيق يسمى  sendemail:

(.venv) $ django-admin startproject config .
(.venv) $ python manage.py startapp sendemail

للتأكد من أن كل شيء تم تثبيته بشكل صحيح، سنقوم بتشغيل السيرفر المحلي  runserver.

(.venv) $ python manage.py migrate
(.venv) $ python manage.py runserver

إذا قمت بفتح متصفحك على 127.0.0.1:8000، فيجب أن تشاهد الشاشة التالية:

الصفحة الترحيبية لجانغو
الصفحة الترحيبية لجانغو

تحديث ملف settings.py

لقد أنشأنا تطبيقًا جديدًا لذا نحتاج إلى إضافته إلى مشروع Django الخاص بنا. ضمن ملف  settings.py، و تحت قسم r INSTALLED_APPS، أضف  sendemail في الأعلى.

# config/settings.py
INSTALLED_APPS [
    "sendemail.apps.SendemailConfig",  
    ...
]

ثم ضمن نفس ملف  settings.py، حدد  DEFAULT_FROM_EMAIL، وهو  test@pyarabic.com بالنسبة لي. ثم قم بتحديث EMAIL_BACKEND لتحديد الواجهة الخلفية للبريد الإلكتروني التي سنستخدمها، ووحدة التحكم، بحيث يتم إخراج البريد الإلكتروني إلى سطر الأوامر.

# config/settings.py
DEFAULT_FROM_EMAIL = "test@pyarabic.com"
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"

تحديث ملف urls.py

نحن بحاجة إلى تحديث ملف  django_project/urls.py، سنقوم بإستدعاء  include و إضافة نمط URL جديد للتطبيق:

# django_project/urls.py
from django.contrib import admin
from django.urls import path, include  

urlpatterns = [
    path("admin/", admin.site.urls),
    path("", include("sendemail.urls")),  
]

قم بعد ذلك بإنشاء ملف جديد sendemail/urls.py وأضف الكود التالي بحيث يكون نموذج الاتصال الرئيسي على email/ ويعيد الإرسال الناجح التوجيه إلى  success/.

# sendemail/urls.py
from django.contrib import admin
from django.urls import path

from .views import contactView, successView

urlpatterns = [
    path("contact/", contactView, name="contact"),
    path("success/", successView, name="success"),
]

إنشاء Forms.py

نبقى دائما داخل تطبيق sendemail، أنشئ ملفًا جديدًا باسم  sendemail/forms.py.

سيحتوي هذا الملف على الحقول الموجودة في نموذج الاتصال، وهي ثلاثة: from_emailsubject, و message.

# sendemail/forms.py
from django import forms

class ContactForm(forms.Form):
    from_email = forms.EmailField(required=True)
    subject = forms.CharField(required=True)
    message = forms.CharField(widget=forms.Textarea, required=True)

نحن نستخدم واجهة برمجة التطبيقات Forms API المدمجة في Django لإنشاء ثلاثة حقول بسرعة.

إنشاء ملف views.py

لنقم الآن بإنشاء العرض الذي سيقوم بالجزء الأكبر من العمل لنموذج الاتصال. قم بتحديث ملف  sendemail/views.py :

# sendemail/views.py
from django.core.mail import send_mail, BadHeaderError
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render, redirect
from .forms import ContactForm

def contactView(request):
    if request.method == "GET":
        form = ContactForm()
    else:
        form = ContactForm(request.POST)
        if form.is_valid():
            subject = form.cleaned_data["subject"]
            from_email = form.cleaned_data["from_email"]
            message = form.cleaned_data['message']
            try:
                send_mail(subject, message, from_email, ["admin@example.com"])
            except BadHeaderError:
                return HttpResponse("Invalid header found.")
            return redirect("success")
    return render(request, "email.html", {"form": form})

def successView(request):
    return HttpResponse("Success! Thank you for your message.")

الكثير تحدث هنا! نبدأ باستيراد send_mail وBadHeaderError لأسباب أمنية.

بعد ذلك قمنا بالإشارة إلى ContactForm الذي أنشأناه للتو في ملف  forms.py.

إنشاء القالب

الخطوة النهائية وهي إنشاء قوالب لصفحات البريد الإلكتروني. أحب إنشاء مجلد templates على مستوى المشروع ووضع كافة القوالب الخاصة بي هناك.

لذا قم بإنشاء دليل جديد يسمى templates في دليل المشروع.

(.venv) $ mkdir templates

قم بعد ذلك بتحديث ملف  settings.py حتى نخبر Django عن مكان البحث عن القوالب.

# django_project/settings.py
TEMPLATES = [
    {
        ...
        "DIRS": [BASE_DIR / "templates"],  
        ...
    },
]

الآن قم بإنشاء ملف جديد يسمى  templates/email.html وقم بتحديثه بالكود التالي:

<!-- templates/email.html -->
<h1>Contact Us</h1>
<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <div class="form-actions">
      <button type="submit">Send</button>
    </div>
</form>

إرسال البريد الإلكتروني الأول

تأكد من أن الخادم يعمل باستخدام  python manage.py runserver ثم إفتح المتصفح على http://127.0.0.1:8000/email/ واملأ النموذج، وانقر فوق الزر “إرسال”.

صفحة إتصل بنا بإستخدام جانغو

بعد ذلك ستتم إعادة توجيهك إلى http://127.0.0.1:8000/success/ إذا تم إرسال البريد الإلكتروني.

success

خدمة البريد الإلكتروني

لإرسال رسائل بريد إلكتروني فعلية، ستحتاج إلى خدمة مواقع مثل SendGrid أو mailgun أو SES. لحسن الحظ، يتعامل Django مع هذه الخدمات بكل سهولة.

في هذا الدرس سنستخدم SendGrid، قم بإنشاء حساب مجاني وحدد خيار SMTP، وهو أسهل في الإعداد من نهج Web API.

تحديد خبار smtp على موقع sendgrid

تتطلب الشاشة التالية تسمية اسم مفتاح API الخاص بك، والذي أسميته  newspaper ولكن يمكن تسميته بأي شيء. بعد ذلك انقر فوق الزر الأزرق “إنشاء مفتاح”.

integrate

قم بتحديث  settings.py على النحو التالي، من خلال التبديل من  console إلى  smtp لـ  EMAIL_BACKEND، مع إضافة عدة حقول جديدة.

قم أيضا بتحديث  EMAIL_HOST_PASSWORD بكلمة مرور التي قمت بإنشاءها على SendGrid.

# django_project/settings.py
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"  # new
DEFAULT_FROM_EMAIL = "test@pyarabic.com"
EMAIL_HOST = "smtp.sendgrid.net"  # new
EMAIL_HOST_USER = "apikey"  # new
EMAIL_HOST_PASSWORD = "<sendgrid_password>"  # new
EMAIL_PORT = 587  # new
EMAIL_USE_TLS = True  # new

هناك أيضًا خطوة إضافية مهمة، وهي التحقق من المرسل. و هي في الأساس خطوة إضافية لمساعدة SendGrid على الالتزام بقوانين مكافحة البريد العشوائي.

قم بإتباع تعليمات SendGrid للتحقق من حساب البريد الإلكتروني.

في السابق كان من الممكن إرسال رسائل بريد إلكتروني من عنوان مجاني على خدمات مثل gmail.com أو yahoo.com، اما الأن لم يعد هذا هو الحال بسبب بروتوكول مصادقة البريد الإلكتروني DMARC.

إلى هنا ستكون قادرًا على إرسال رسائل بريد إلكتروني حقيقية من تطبيق Django. غالبًا ما يتم استخدام هذا عندما يقوم المستخدم بالتسجيل لأول مرة، ويحتاج إلى إعادة تعيين كلمة المرور.


اكتشاف المزيد من بايثون العربي

اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

Scroll to Top

اكتشاف المزيد من بايثون العربي

اشترك الآن للاستمرار في القراءة والحصول على حق الوصول إلى الأرشيف الكامل.

Continue reading