שליטה ב-Django Forms עבור קלט ואימות משתמש

טפסי Django הם כלי רב עוצמה לטיפול בקלט משתמש ואימות נתונים. הם מאפשרים לך ליצור טפסים שיכולים לאסוף, לעבד ולאמת נתונים בצורה מאובטחת וידידותית למשתמש. מאמר זה ידריך אותך דרך היסודות של עבודה עם טפסי Django וכיצד לשלוט בשימוש בהם לטיפול ואימות יעיל של קלט משתמשים.

מה הם טפסי ג'נגו?

טפסי Django הם מחלקות Python שמטפלות בנתוני טופס. הם יכולים לשמש לעיבוד טפסי HTML, עיבוד נתונים שנשלחו ואימות קלט. טפסים ב-Django משולבים באופן הדוק עם מודלים של Django, המאפשרים אימות קל ושמירת הנתונים במסד הנתונים. אתה יכול לחשוב על טפסי Django כעל דרך להפוך יצירת טפסים לאוטומטיים, אימות נתונים וטיפול בשגיאות.

יצירת טופס ג'נגו פשוט

נתחיל ביצירת טופס פשוט לאיסוף קלט משתמשים. אנו ניצור טופס לאיסוף שם משתמש וכתובת דוא"ל.

from django import forms

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

בקוד לעיל, יצרנו טופס בשם ContactForm הכולל שני שדות: name ו-email. CharField משמש להזנת טקסט, ו-EmailField מבטיח שהקלט הוא כתובת דוא"ל חוקית.

עיבוד טפסים בתבניות

לאחר הגדרת הטופס שלך, עליך לעבד אותו בתבנית. אתה יכול לעבד טופס ב-Django באמצעות תג התבנית {{ form }}, שייצור HTML עבור כל שדה טופס באופן אוטומטי.

{% load static %}

<form method="POST" action="">
    {% csrf_token %}
    {{ form.as_p }}
    Submit</button>
</form>

בקוד תבנית זה, אנו משתמשים ב-form.as_p כדי לעבד את שדות הטופס בתוך תגי הפסקה. {% csrf_token %} משמש לכלול אסימון CSRF למטרות אבטחה בעת טיפול בהגשת טופס.

אימות נתוני טופס

אימות הוא חלק חיוני בכל צורה. טפסי Django מספקים אימות אוטומטי המבוסס על סוגי השדות, אך ניתן גם להוסיף לוגיקת אימות מותאמת אישית כדי להבטיח שלמות הנתונים.

אימות שדה מובנה

שדות ג'נגו מגיעים עם אימות מובנה. לדוגמה, EmailField יבדוק אוטומטית אם הקלט הוא כתובת אימייל חוקית. אם הקלט לא חוקי, הטופס יחזיר הודעת שגיאה.

שיטות אימות מותאמות אישית

אתה יכול גם ליצור שיטות אימות מותאמות אישית כדי להחיל כללי אימות מורכבים יותר. הנה דוגמה שבה אנו מאמתים שדומיין האימייל הוא מחברה ספציפית.

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

    def clean_email(self):
        email = self.cleaned_data['email']
        if '@company.com' not in email:
            raise forms.ValidationError("Email must be from company.com domain.")
        return email

בקוד לעיל, אנו מגדירים שיטה clean_email הבודקת אם האימייל מכיל '@company.com'. אם לא, תועלה ValidationError, והטופס יציג הודעת שגיאה.

טיפול בהגשת טופס

לאחר שליחת הטופס, תוכל לגשת לנתוני הטופס בפונקציית התצוגה שלך. כך תוכל לעבד הגשת טופס:

from django.shortcuts import render
from .forms import ContactForm

def contact_view(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            # Process the data, e.g., save to the database or send email
            name = form.cleaned_data['name']
            email = form.cleaned_data['email']
            # Handle the data as needed
            return render(request, 'success.html', {'name': name})
    else:
        form = ContactForm()

    return render(request, 'contact.html', {'form': form})

בדוגמה זו, כאשר הטופס נשלח, אנו בודקים אם הטופס תקף באמצעות form.is_valid(). אם הטופס תקף, אנו ניגשים לנתונים הנוקים ומעבדים אותם. אם לא, Django יציג אוטומטית את הודעות השגיאה המתאימות למשתמש.

הצגת שגיאות טופס

Django מוסיף אוטומטית הודעות שגיאה לשדות טופס לא חוקיים. אתה יכול להציג את הודעות השגיאה האלה בתבנית שלך כדי לתת משוב למשתמש. הנה דוגמה:

{% if form.errors %}
    {% for field in form %} {% for error in field.errors %}
  • {{ שגיאה }}
  • {% endfor %} {% endfor %}
{% endif %}

בקוד זה, אנו בודקים אם יש שגיאות כלשהן בטופס ובלולאה דרך כל שדה טופס כדי להציג את הודעות השגיאה המתאימות.

שימוש בטפסים עם מודלים

Django גם מאפשר לך לקשור בקלות טפסים לדגמים באמצעות ModelForm. ModelForm יוצר אוטומטית שדות טופס המבוססים על שדות המודל, מה שמפשט את תהליך בניית הטפסים עבור מודלים של מסד נתונים.

יצירת ModelForm

הנה דוגמה לשימוש ב-ModelForm כדי ליצור טופס המבוסס על מודל:

from django.db import models
from django import forms

class Contact(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField()

class ContactForm(forms.ModelForm):
    class Meta:
        model = Contact
        fields = ['name', 'email']

בקוד זה, יש לנו דגם Contact עם שדות name ו-email. ContactForm הוא ModelForm שיוצר אוטומטית שדות טופס המבוססים על המודל Contact.

מַסְקָנָה

שליטה בטפסי Django מאפשרת לך לטפל בקלט משתמש בצורה יעילה ומאובטחת. על ידי מינוף אימות מובנה, שיטות אימות מותאמות אישית ושילוב מודלים, אתה יכול להבטיח חווית משתמש חלקה ולשמור על שלמות הנתונים ביישומי ה-Django שלך. תרגל יצירה ושימוש בטפסים כדי להיות מיומן יותר בטיפול בסוגים שונים של קלט משתמשים.