Search
Close this search box.
Search
Close this search box.

اعتبار سنجی در جنگو

اعتبار سنجی در جنگو

فهرست مطالب

در این راهنمای جامع، به بررسی اعتبار سنجی در جنگو می پردازیم. همراه شما هستیم.

این مقاله که توسط کارشناسان سایت کرالاهاست تهیه و تدوین گشته است، راهنمای دقیقی در مورد نحوه پیاده‌سازی و استفاده مؤثر از اعتبارسنجی در جنگو ارائه می‌کند. سایت کرالاهاست، از برترین های این حوزه معرفی می شود.

پیشنهاد می کنیم صفحه فریم ورک جنگو چیست را مطالعه کنید.

اعتبار سنجی در جنگو

اعتبار سنجی در جنگو
اعتبار سنجی در جنگو

جنگو، یک چارچوب وب قدرتمند و قوی برای ساخت برنامه های کاربردی وب، طیف گسترده ای از ابزارهای داخلی را برای اطمینان از یکپارچگی داده ها در برنامه شما ارائه می دهد. یکی از این ویژگی ها، اعتبار سنجی است که یک جزء حیاتی برای هر برنامه وب موفقی است.

چرا اعتبارسنجی در جنگو مهم است؟

چرا اعتبارسنجی در جنگو مهم است؟
چرا اعتبارسنجی در جنگو مهم است؟

اعتبار سنجی در جنگو نقش مهمی در حفظ کیفیت و یکپارچگی داده های شما ایفا می کند. با اجرای اعتبارسنجی، می توانید:

  1. جلوگیری از بدشکل داده ها: اطمینان حاصل کنید که داده های وارد شده به سیستم شما با قوانین و الزامات برنامه شما مطابقت دارد.
  2. بهبود تجربه کاربر: بازخورد واضح و آموزنده را در مورد هر گونه خطا یا مشکل در داده های ارسالی ارائه دهید.
  3. محافظت در برابر آسیب پذیری های امنیتی: خطر ورودی های مخرب مانند تزریق SQL یا حملات اسکریپت بین سایتی را کاهش دهید.
  4. اعتبار سنجی فرم جنگو: یک مرور کلی جنگو یک سیستم اعتبارسنجی جامع را از طریق ماژول فرم های داخلی خود ارائه می دهد. بخش‌های زیر عمیق‌تر به مؤلفه‌ها و تکنیک‌های مختلف برای اجرای موثر اعتبارسنجی در جنگو می‌پردازند.

ایجاد یک فرم اعتبار سنجی در جنگو

برای ایجاد یک فرم با اعتبار سنجی در جنگو، باید موارد زیر را رعایت نمایید:

وارد کردن فرم‌های جنگو:

با وارد کردن ماژول فرم‌های لازم با افزودن from django import forms به اسکریپت پایتون شروع کنید.

کلاس فرم خود را تعریف کنید:

یک کلاس فرم جدید ایجاد کنید که از آن بهره می برد forms.Form و فیلدهای فرم خود را در آن تعریف کنید. مثلا:

class ContactForm(forms.Form):
name = forms.CharField(max_length=100)
email = forms.EmailField()
message = forms.CharField(widget=forms.Textarea)

 

 

افزودن قوانین اعتبار سنجی در جنگو (سفارشی)

جنگو چندین اعتبارسنجی داخلی را برای موارد استفاده رایج، مانند EmailValidator آدرس‌های ایمیل، ارائه می‌کند. با این حال، می توانید قوانین اعتبار سنجی در جنگو سفارشی را نیز با استفاده از مراحل زیر ایجاد کنید:

تعریف یک تابع اعتبار سنجی:

تابعی ایجاد کنید که یک آرگومان واحد، مقداری که باید تایید شود را می گیرد. در داخل تابع، بررسی های اعتبارسنجی لازم را انجام دهید و ValidationError اگر اعتبارسنجی ناموفق بود، a  را بالا ببرید.

ضمیمه اعتباردهنده به یک فیلد:

تابع اعتبار سنجی در جنگو را به  validatorsویژگی فیلد فرم مورد نظر اضافه کنید. مثلا:

from django.core.exceptions import ValidationError

def validate_even(value):
if value % 2 != 0:
raise ValidationError('Value must be even.')

class SampleForm(forms.Form):
even_number = forms.IntegerField(validators=[validate_even])

تمیز کردن و اعتبارسنجی داده های فرم

جنگو به ‌طور خودکار، اعتبار هر فیلد فرم را هنگام ارسال فرم انجام می‌دهد. با این حال، می‌توانید با فراخوانی   is_validروش در یک نمونه فرم، اعتبارسنجی را به صورت دستی فعال کنید.

به‌علاوه، می‌توانید عملیات اعتبارسنجی یا تمیز کردن پیچیده‌تری را با نادیده گرفتن متدها در کلاس فرم خود انجام clean_<fieldname>  دهید (clean). مثلا:

class RegistrationForm(forms.Form):
password = forms.CharField(widget=forms.PasswordInput)
password_confirm = forms.CharField(widget=forms.PasswordInput)

def clean(self):
cleaned_data = super().clean()
password = cleaned_data.get('password')
password_confirm = cleaned_data.get('password_confirm')

if password and password_confirm and password != password_confirm:
raise forms.ValidationError('Passwords must match.')

اعتبار سنجی مدل در جنگو

جنگو علاوه بر اعتبار سنجی فرم، اعتبارسنجی را در سطح مدل نیز ارائه می دهد. اعتبارسنجی مدل برای اطمینان از یکپارچگی داده ها صرف نظر از منبع داده، مانند رابط های API یا رابط های مدیریت مفید است.

افزودن اعتبار سنجی به فیلدهای مدل

برای افزودن اعتبارسنجی به یک فیلد مدل، از validatorsویژگی مشابه فیلدهای فرم استفاده کنید:

 

from django.db

وارد کردن مدل ها از django.core.validators MinLengthValidator را وارد می کند:

class UserProfile(models.Model):

username = models.CharField(max_length=100, validators=[MinLengthValidator(5)])

email = models.EmailField(unique=True)

### **Running Model Validation**

While model validation is not automatically triggered when saving an instance, you can manually run validation using the `full_clean()` method:

“`python
user_profile = UserProfile(username=’JohnDoe’, email=’[email protected]’)
try:
user_profile.full_clean()
except ValidationError as e:
# Handle validation error

توصیه می شود  full_cleanقبل از ذخیره نمونه های مدل برای اطمینان از یکپارچگی داده ها رابط بگیرید.

ترکیب اعتبارسنجی فرم و مدل

برای استفاده از تمام قدرت سیستم اعتبار سنجی جنگو، می توانید اعتبارسنجی فرم و مدل را ترکیب کنید. این رویکرد به شما امکان می دهد منطق اعتبار سنجی پیچیده تری را در سطح فرم انجام دهید و در عین حال از یکپارچگی داده ها در سطح مدل اطمینان حاصل کنید.

استفاده از فرم های مدل اعتبار سنجی در جنگو

جنگو یک  ModelForm کلاس ارائه می دهد که به طور خودکار فرمی را بر اساس یک مدل مشخص تولید می کند. این باعث می‌شود فرم‌هایی با اعتبارسنجی که مستقیماً به فیلدهای مدل شما نگاشت می‌شوند، آسان شود:

from django.forms import ModelForm
from .models import UserProfile

class UserProfileForm(ModelForm):
class Meta:
model = UserProfile
fields = [‘username’, ’email’]

با استفاده از ModelForm، می توانید اطمینان حاصل کنید که قوانین اعتبار سنجی فرم شما با قوانین اعتبارسنجی مدل شما مطابقت دارد.

بهترین روش ها برای پیاده سازی اعتبار سنجی در جنگو

بهترین روش ها برای پیاده سازی اعتبار سنجی در جنگو
بهترین روش ها برای پیاده سازی اعتبار سنجی در جنگو

برای اطمینان از یک فرآیند اعتبار سنجی در جنگو روان و کارآمد در برنامه های جنگو خود، این بهترین شیوه ها را دنبال کنید:

  1. در صورت امکان، از اعتبار سنجی داخلی استفاده کنید

جنگو طیف گسترده‌ای از اعتبارسنجی‌های داخلی را برای سناریوهای اعتبارسنجی رایج، مانند EmailValidator  و … با استفاده از این اعتبارسنجی‌ها، می‌توانید در زمان و تلاش صرفه‌جویی کنید و در عین حال از رفتار اعتبارسنجی ثابت اطمینان حاصل کنید.URLValidatorMinValueValidatorMaxValueValidator

  1. پیام های خطای کاربر پسند را ارائه دهید

هنگام مطرح کردن یک ValidationError، یک پیام خطای واضح و آموزنده ارائه دهید که به کاربران کمک می کند مشکل را درک کرده و آن را برطرف کنند. مثلا:

def validate_positive(value):
if value <= 0:
raise ValidationError('Value must be a positive number.')

 

 

  1. منطق اعتبار سنجی در جنگو را از منطق تجاری جدا نگه دارید

از مخلوط کردن منطق اعتبارسنجی با منطق تجاری برنامه خود اجتناب کنید. در مقابل، اعتبارسنجی را در لایه‌های فرم یا مدل کپسوله کنید تا نگهداری و آزمایش آن آسان‌تر شود.

  1. قوانین اعتبارسنجی در جنگو خود را آزمایش کنید

با نوشتن تست‌های کامل برای هر سناریوی اعتبارسنجی، از قابلیت اطمینان قوانین اعتبارسنجی خود اطمینان حاصل کنید. این به شناسایی هر گونه مشکل در مراحل اولیه توسعه کمک می کند و اطمینان حاصل می کند که برنامه شما یکپارچگی داده ها را حفظ می کند.

  1. از اعتبارسنجی مدل برای یکپارچگی داده ها استفاده کنید

از اعتبارسنجی مدل برای اطمینان از یکپارچگی داده ها در همه منابع داده، از جمله نقاط پایانی API و رابط های مدیریت استفاده کنید. با استفاده از اعتبارسنجی مدل، می توانید تضمین کنید که تمام داده های وارد شده به سیستم شما مطابق با قوانین و الزامات تعریف شده است.

برای کسب اطلاعات بیشتر، به سایت کرالاهاست مراجعه نمایید.

تکنیک های پیشرفته اعتبار سنجی در جنگو

برای افزایش بیشتر قابلیت های اعتبار سنجی در جنگو خود، تکنیک های پیشرفته زیر را بررسی کنید:

اعتبار سنجی بین میدانی

برای اعتبارسنجی داده ها بر اساس مقادیر چند فیلد،  (clean)روش فرم یا مدل خود را نادیده بگیرید. این به شما امکان می دهد داده ها را از فیلدهای مختلف در یک مرحله اعتبارسنجی مقایسه و اعتبارسنجی کنید. مثلا:

class DateRangeForm(forms.Form):
start_date = forms.DateField()
end_date = forms.DateField()

def clean(self):
cleaned_data = super().clean()
start_date = cleaned_data.get('start_date')
end_date = cleaned_data.get('end_date')

if start_date and end_date and start_date > end_date:
raise forms.ValidationError('End date must be after start date.')

 

اعتبار سنجی مشروط

در برخی موارد، ممکن است بخواهید قوانین اعتبارسنجی در جنگو را بر اساس شرایط یا زمینه های خاص اعمال کنید. شما می توانید با افزودن منطق شرطی در توابع اعتبارسنجی سفارشی خود یا با استفاده از Django به این امر دست یابید ConditionalValidator. مثلا:

from django.core.validators import MinLengthValidator, ConditionalValidator

class CustomUser(models.Model):
is_admin = models.BooleanField()
username = models.CharField(
max_length=100,
validators=[ConditionalValidator(MinLengthValidator(5), lambda user: user.is_admin)],
)

 

 

در این مثال، اراده  MinLengthValidatorتنها در صورتی برای فیلد اعمال می شود username که is_adminفیلد روی  Trueباشد.

با اجرای این تکنیک های اعتبار سنجی پیشرفته، می توانید یک سیستم اعتبارسنجی انعطاف پذیرتر و قدرتمندتر برای برنامه های جنگو خود ایجاد کنید.

به یاد داشته باشید که در حالی که محتوای با کیفیت برای رتبه بندی در گوگل ضروری است، تنها یکی از بسیاری از عواملی است که بر رتبه بندی جست و جو تأثیر می گذارد. به کاوش و بهینه سازی سایر جنبه های وب سایت خود برای بهبود عملکرد و دیده شدن آن در نتایج جست و جو ادامه دهید.

بین المللی سازی و بومی سازی در اعتبار سنجی

هنگام توسعه یک برنامه چند زبانه جنگو، ضروری است که بین المللی سازی (i18n) و محلی سازی (l10n) را در فرآیند اعتبارسنجی خود در نظر بگیرید. با ترکیب این مفاهیم، ​​می توانید تجربه کاربر پسندتری را برای مخاطبان جهانی فراهم کنید.

برای بین المللی کردن و بومی سازی اعتبار خود، این مراحل را دنبال کنید:

علامت‌گذاری پیام‌های خطای اعتبارسنجی برای ترجمه:

از gettextتابع یا _مختصر برای علامت‌گذاری پیام‌های خطای اعتبارسنجی برای ترجمه استفاده کنید. مثلا:

from django.utils.translfrom django.utils.translation import gettext as _

def validate_positive(value):
if value <= 0:
raise ValidationError(_('Value must be a positive number.'))

 

پیام‌های خطای ترجمه:

از ابزارهای ترجمه جنگو، مانند فایل‌ها، برای ارائه ترجمه پیام‌های خطا به زبان‌های مورد نظر استفاده .poکنید .mo.

محلی‌سازی ورودی‌های فرم:

جنگو را برای بومی‌سازی خودکار فیلدهای ورودی فرم، مانند ورودی‌های تاریخ و شماره، بر اساس منطقه کاربر پیکربندی کنید. این را می توان با تنظیم USE_L10N تنظیمات Trueدر فایل تنظیمات جنگو به دست آورد:

USE_L10N = True

با گنجاندن بین‌المللی‌سازی و بومی‌سازی در فرآیند اعتبارسنجی خود، می‌توانید یک برنامه کاربردی جامع‌تر و در دسترس‌تر برای کاربران در سراسر جهان ایجاد کنید.

توصیه می کنیم در صورت داشتن هر گونه سوال یا ابهام با متخصصان ما در سایت کرالاهاست در ارتباط باشید و مشورت های لازم را دریافت نمایید.

اعتبار سنجی قابل استفاده مجدد

برای قوانین اعتبارسنجی که معمولاً مورد استفاده قرار می گیرند، ایجاد اعتبار سنجی قابل استفاده مجدد را در نظر بگیرید. این می تواند به حفظ ثبات در برنامه شما و کاهش تکرار کد کمک کند.

برای ایجاد یک اعتبارسنجی قابل استفاده مجدد، مراحل زیر را دنبال کنید:

تعریف یک کلاس اعتبار سنجی:

یک کلاس جدید ایجاد کنید که از جنگو به ارث برده BaseValidatorو __call__متد را پیاده سازی کند. روش __call__باید حاوی منطق اعتبارسنجی باشد و ValidationErrorدر صورت عدم موفقیت اعتبار،  a را افزایش دهد.

from django.core.validators import BaseValidator, ValidationError

class EvenNumberValidator(BaseValidator):
def __call__(self, value):
if value % 2 != 0:
raise ValidationError('Value must be an even number.')

 

استفاده از اعتبارسنجی قابل استفاده مجدد:

اعتبارسنجی قابل استفاده مجدد را به validators ویژگی فیلدهای فرم یا مدل دلخواه اضافه کنید.

class SampleForm(forms.Form):
even_number = forms.IntegerField(validators=[EvenNumberValidator()])

 

با پیاده‌سازی اعتبارسنجی‌های قابل استفاده مجدد، می‌توانید فرآیند اعتبارسنجی خود را ساده کنید و حفظ و به‌روزرسانی قوانین اعتبارسنجی در سراسر برنامه‌تان را آسان‌تر کنید.

مدیریت خطا در اعتبارسنجی

مدیریت صحیح خطا برای اطمینان از تجربه کاربری روان در طول فرآیند اعتبار سنجی در جنگو بسیار مهم است. جنگو چندین ابزار و تکنیک برای مدیریت خطاها و نمایش آنها به کاربر ارائه می دهد.

دسترسی به خطاهای فرم و فیلد: جنگو خطاهای اعتبار سنجی را در ویژگی فرم ذخیره می کند errors که می تواند در نماها و الگوهای شما قابل دسترسی باشد. مثلا:

{% if form.errors %}

There were some errors in your submission:

    • {% for field, errors in form.errors.items %}
    • {% for error in errors %}

    • {{ field }}: {{ error }}

{% endfor %}
{% endfor %}

{% endif %}

 

 

سفارشی کردن پیام های خطا:

پیام های خطای نمایش داده شده برای اعتبار سنجی داخلی را با ارائه error_messagesویژگی برای فیلدهای فرم یا مدل خود سفارشی کنید. مثلا:

class LoginForm(forms.Form):
username = forms.CharField(
max_length=100,
error_messages={'required': 'Please enter your username.'}
)
password = forms.CharField(
widget=forms.PasswordInput,
error_messages={'required': 'Please enter your password.'}
)

 

 

با مدیریت موثر خطاها و ارائه واضح و آموزنده پیام های خطا، می توانید تجربه کاربر را در طول فرآیند اعتبار سنجی افزایش دهید و کاربران را به سمت ارسال داده های صحیح و معتبر راهنمایی کنید.

اعتبار سنجی سمت مشتری

در حالی که اعتبار سنجی سمت سرور در جنگو برای اطمینان از یکپارچگی و امنیت داده ها بسیار مهم است، اعتبار سنجی سمت سرویس گیرنده می تواند با ارائه بازخورد فوری در مورد خطاهای ورودی، تجربه کاربر را بیشتر بهبود بخشد.

برای اجرای اعتبار سنجی سمت مشتری، رویکردهای زیر را در نظر بگیرید:

ویژگی‌های اعتبارسنجی :HTML5required

از ویژگی‌های اعتبارسنجی HTML5 ، مانند pattern، min و max، برای اجرای قوانین اعتبارسنجی اولیه به طور مستقیم در مرورگر استفاده کنید.

این ویژگی ها را می توان با استفاده از کلاس جنگو به فیلدهای فرم اضافه کرد Widget. مثلا:


class RegistrationForm(forms.Form):
username = forms.CharField(
max_length=100,
widget=forms.TextInput(attrs={'required': True, 'pattern': '[A-Za-z0-9]{5,}'})
)
email = forms.EmailField(widget=forms.EmailInput(attrs={'required': True}))

 

 

اعتبار سنجی جاوا اسکریپت:

منطق اعتبارسنجی جاوا اسکریپت سفارشی را برای قوانین اعتبارسنجی پیچیده تر یا تجربه کاربری تعاملی تر پیاده سازی کنید. با اعتبار سنجی جاوا اسکریپت، می توانید بازخورد بلادرنگ را به کاربران در هنگام پر کردن فرم ارائه دهید و هر گونه خطا یا مشکلی را فوراً برجسته کنید.

هنگام اجرای اعتبار سنجی سمت سرویس گیرنده، اطمینان حاصل کنید که اعتبار سنجی سمت سرور برقرار است، زیرا اعتبار سنجی سمت سرویس گیرنده می تواند به راحتی توسط کاربر دور زده یا غیر فعال شود.

استفاده از کتابخانه های شخص ثالث برای اعتبار سنجی پیشرفته

علاوه بر ابزارهای اعتبار سنجی داخلی جنگو، چندین کتابخانه شخص ثالث در دسترس هستند که می توانند قابلیت های اعتبارسنجی شما را گسترش داده و افزایش دهند. برخی از گزینه های محبوب عبارتند از:

  • :django-crispy-forms یک برنامه جنگو که به شما کمک می کند تا فرم های زیبا و پاسخگو را با حداقل تلاش ایجاد کنید. همچنین پشتیبانی داخلی از فریم ورک های CSS محبوب مانند Bootstrap و Foundation را فراهم می کند.
  • django-localflavor : مجموعه‌ای از کمک‌کننده‌ها و اعتبارسنجی‌های فرم خاص کشور، مانند اعتبارسنجی شماره تلفن و کد پستی، برای اجرای قوانین اعتبارسنجی محلی.
  • :django-floppyforms  توسعه‌ای از سیستم فرم جنگو است که فیلدهای فرم سفارشی، ویجت‌ها و ویژگی‌های اعتبارسنجی، از جمله انواع ورودی HTML5 و اعتبارسنجی سمت سرویس گیرنده را فراهم می‌کند.

با گنجاندن این کتابخانه های شخص ثالث در برنامه جنگو خود، می توانید روند اعتبار سنجی را بیشتر بهبود بخشید و تجربه ای کارآمدتر و کاربرپسند ایجاد کنید.

اطلاعات کلی از اعتبارسنجی در جنگو

موضوع خلاصه
اعتبار سنجی فرم در جنگو اصول اعتبار سنجی فرم جنگو، از جمله تعریف فیلدهای فرم، استفاده از اعتبار سنجی داخلی، ایجاد اعتبارسنجی سفارشی، و رسیدگی به خطاهای ارسال فرم و اعتبارسنجی را پوشش می دهد.
اعتبار سنجی مدل در جنگو درباره اعتبارسنجی مدل در جنگو، از جمله استفاده از اعتبارسنجی‌های فیلد داخلی، ایجاد اعتبارسنجی مدل سفارشی، و راه‌اندازی دستی اعتبارسنجی مدل با استفاده از این full_cleanروش، بحث می‌کند.
ترکیب اعتبارسنجی فرم و مدل مزایای ترکیب فرم و اعتبار مدل را با استفاده از ModelFormکلاس جنگو بررسی می کند، که به طور خودکار فرمی را بر اساس یک مدل مشخص تولید می کند و سازگاری بین قوانین اعتبارسنجی فرم و مدل را تضمین می کند.
بهترین روش ها برای اجرای اعتبارسنجی بهترین شیوه‌ها را برای اجرای اعتبارسنجی در جنگو ارائه می‌کند، مانند استفاده از اعتبارسنجی داخلی، ارائه پیام‌های خطای کاربر پسند، جداسازی منطق اعتبارسنجی از منطق تجاری، آزمایش قوانین اعتبارسنجی و استفاده از اعتبارسنجی مدل برای یکپارچگی داده‌ها.
تکنیک های اعتبار سنجی پیشرفته تکنیک‌های اعتبار سنجی پیشرفته را در جنگو معرفی می‌کند، از جمله اعتبارسنجی میدانی متقاطع، اعتبارسنجی شرطی، بین‌المللی‌سازی و محلی‌سازی در اعتبارسنجی، اعتبارسنجی‌های قابل استفاده مجدد، و مدیریت خطا در اعتبارسنجی.
اعتبار سنجی سمت مشتری توضیح می دهد که چگونه می توان تجربه کاربر را با اجرای اعتبار سنجی سمت سرویس گیرنده با استفاده از ویژگی های اعتبار سنجی HTML5 و منطق اعتبار سنجی جاوا اسکریپت بهبود بخشید، در حالی که اطمینان حاصل می شود که اعتبار سنجی سمت سرور برای امنیت و یکپارچگی داده ها باقی می ماند.
استفاده از کتابخانه های شخص ثالث برای اعتبار سنجی پیشرفته کتابخانه‌های شخص ثالث محبوب را برای اعتبار سنجی پیشرفته در برنامه‌های جنگو، مانند فرم‌های django-crispy، django-local flavor  و django-floppyforms برجسته می‌کند که می‌تواند قابلیت‌های اعتبارسنجی را فراتر از ابزارهای داخلی جنگو گسترش داده و بهبود بخشد.

نتیجه گیری

نتیجه گیری
نتیجه گیری

در این مقاله و با همیاری کارشناسان سایت کرالاهاست، جنبه‌های مختلف اعتبارسنجی در جنگو، از جمله اعتبار سنجی فرم، اعتبارسنجی مدل، و نحوه ترکیب این دو برای یک سیستم اعتبارسنجی قوی‌تر را بررسی کرده‌ایم. با پیاده سازی اعتبار سنجی مناسب در برنامه های جنگو خود، می توانید از یکپارچگی داده ها اطمینان حاصل کنید، تجربه کاربر را افزایش دهید و در برابر آسیب پذیری های امنیتی محافظت کنید.

با پیروی از بهترین شیوه‌ها، استفاده از تکنیک‌های پیشرفته و استفاده از کتابخانه‌های شخص ثالث، می‌توانید یک سیستم اعتبارسنجی قوی و انعطاف‌پذیر ایجاد کنید که می‌تواند با نیازهای در حال تغییر برنامه شما و کاربران آن سازگار شود.

اگر خواهان کسب اطلاعات بیشتر در مورد اعتبارسنجی در جنگو هستید، با مشاورین سایت کرالاهاست تماس بگیرید. تیم کارشناسان سایت کرالاهاست در هر مرحله، شما را راهنمایی خواهند نمود.

در پایان می توانید نگاهی به صفحات ارسال ایمیل در جنگو و جنگو یا جاوا اسکریپت بیاندازید.

همین امروز پلتفرم خود را ابری کنید

الان ثبت نام کنید و برای ابری کردی سایت یا پلتفرم خود مشاوره بگیرید