برنامه نویسی

درک عبارات منظم جنگو – انجمن DEV

Summarize this content to 400 words in Persian Lang
عبارات منظم (regex) می تواند ترسناک به نظر برسد، اما در جنگو، آنها ابزار قدرتمندی برای ایجاد الگوهای URL سفارشی و اعتبارسنجی ورودی کاربر هستند. بیایید regex را ساده کنیم و نشان دهیم که چگونه در جریان کار جنگو شما قرار می گیرد

عبارات با قاعده چیست؟

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

مسیریابی URL سفارشی (به عنوان مثال، مطابقت با یک قالب خاص مانند یک سال یا نام کاربری در URL ها).

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

به عنوان مثال، این regex:

^[a-zA-Z]+$

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

… رشته هایی را که فقط حاوی حروف هستند مطابقت می دهد.

^ به معنی “شروع رشته” است.

[a-zA-Z] به معنای “هر حرفی (بزرگ یا کوچک) است.”

+ به معنای “یک یا چند” است.

$ به معنای “انتهای رشته” است.

حال، بیایید ببینیم جنگو چگونه از این جادو استفاده می کند.

راه اندازی پروژه جنگو شما

اگر قبلاً برنامه جنگو ندارید، یک برنامه جنگو ایجاد کنید:

django-admin startproject regex_demo
cd regex_demo
python manage.py startapp regex_app

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اضافه کنید regex_app به INSTALLED_APPS در settings.py.

مثال 1: مسیریابی URL سفارشی

بیایید یک الگوی URL ایجاد کنیم که با سال چهار رقمی مطابقت داشته باشد /articles/2024/.

urls.py: الگو را تعریف کنید

from django.urls import re_path
from . import views

urlpatterns = [
re_path(r’^articles/(?P[0-9]{4})/$’, views.articles_by_year, name=’articles_by_year’),
]

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این چیزی است که اتفاق می افتد:

r’^articles/(?P[0-9]{4})/$’: مسابقات /articles/ به دنبال آن یک عدد چهار رقمی (به عنوان مثال، 2024).

(?P[0-9]{4}): سال را در یک متغیر به نام ثبت می کند year.

views.py: رسیدگی به درخواست

from django.http import HttpResponse

def articles_by_year(request, year):
return HttpResponse(f”Articles from the year {year}”)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بازدید کنید /articles/2024/ در مرورگر خود، و خواهید دید:

Articles from the year 2024

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مثال 2: اعتبار سنجی ورودی های فرم

فرض کنید می‌خواهیم مطمئن شویم که نام کاربری فقط حروف، اعداد و زیرخط داشته باشد.

forms.py: منطق اعتبار سنجی را اضافه کنید

from django import forms
import re

class UsernameForm(forms.Form):
username = forms.CharField(max_length=30)

def clean_username(self):
username = self.cleaned_data[‘username’] if not re.match(r’^[a-zA-Z0-9_]+$’, username):
raise forms.ValidationError(“Username can only contain letters, numbers, and underscores.”)
return username

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

views.py: فرم را رندر کنید

from django.shortcuts import render
from .forms import UsernameForm

def signup(request):
if request.method == ‘POST’:
form = UsernameForm(request.POST)
if form.is_valid():
return HttpResponse(“Signup successful!”)
else:
form = UsernameForm()
return render(request, ‘signup.html’, {‘form’: form})

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

signup.html: فرم ساده HTML

method=”post”>
{% csrf_token %}
{{ form.as_p }}
type=”submit”>Sign Up

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تستش کن:

وارد کنید valid_user123- کار می کند!

وارد کنید invalid$user!- یک پیام خطا خواهید دید.

نکات نهایی

از ابزارهای آنلاین استفاده کنید: الگوهای regex خود را در سایت هایی مانند regex101.com تست کنید.

خواندن Regex را بنویسید: استفاده کنید re.VERBOSE برای اضافه کردن نظرات برای وضوح:

pattern = re.compile(r”””
^ # Start of string
[a-zA-Z0-9_] # Letters, numbers, or underscores
+ # One or more
$ # End of string
“””, re.VERBOSE)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

چرا Regex را در جنگو یاد بگیریم؟

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

سوالاتی دارید؟ در نظرات زیر به من اطلاع دهید!

عبارات منظم (regex) می تواند ترسناک به نظر برسد، اما در جنگو، آنها ابزار قدرتمندی برای ایجاد الگوهای URL سفارشی و اعتبارسنجی ورودی کاربر هستند. بیایید regex را ساده کنیم و نشان دهیم که چگونه در جریان کار جنگو شما قرار می گیرد

عبارات با قاعده چیست؟

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

  • مسیریابی URL سفارشی (به عنوان مثال، مطابقت با یک قالب خاص مانند یک سال یا نام کاربری در URL ها).
  • اعتبار سنجی فرم (به عنوان مثال، اطمینان از اینکه شماره تلفن یا نام کاربری با معیارهای خاصی مطابقت دارد).

به عنوان مثال، این regex:

^[a-zA-Z]+$  
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

… رشته هایی را که فقط حاوی حروف هستند مطابقت می دهد.

  • ^ به معنی “شروع رشته” است.
  • [a-zA-Z] به معنای “هر حرفی (بزرگ یا کوچک) است.”
  • + به معنای “یک یا چند” است.
  • $ به معنای “انتهای رشته” است.

حال، بیایید ببینیم جنگو چگونه از این جادو استفاده می کند.


راه اندازی پروژه جنگو شما

  1. اگر قبلاً برنامه جنگو ندارید، یک برنامه جنگو ایجاد کنید:
   django-admin startproject regex_demo
   cd regex_demo
   python manage.py startapp regex_app
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  1. اضافه کنید regex_app به INSTALLED_APPS در settings.py.

مثال 1: مسیریابی URL سفارشی

بیایید یک الگوی URL ایجاد کنیم که با سال چهار رقمی مطابقت داشته باشد /articles/2024/.

urls.py: الگو را تعریف کنید

from django.urls import re_path
from . import views

urlpatterns = [
    re_path(r'^articles/(?P[0-9]{4})/$', views.articles_by_year, name='articles_by_year'),
]
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این چیزی است که اتفاق می افتد:

  • r'^articles/(?P[0-9]{4})/$': مسابقات /articles/ به دنبال آن یک عدد چهار رقمی (به عنوان مثال، 2024).
  • (?P[0-9]{4}): سال را در یک متغیر به نام ثبت می کند year.

views.py: رسیدگی به درخواست

from django.http import HttpResponse

def articles_by_year(request, year):
    return HttpResponse(f"Articles from the year {year}")
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بازدید کنید /articles/2024/ در مرورگر خود، و خواهید دید:

Articles from the year 2024
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


مثال 2: اعتبار سنجی ورودی های فرم

فرض کنید می‌خواهیم مطمئن شویم که نام کاربری فقط حروف، اعداد و زیرخط داشته باشد.

forms.py: منطق اعتبار سنجی را اضافه کنید

from django import forms
import re

class UsernameForm(forms.Form):
    username = forms.CharField(max_length=30)

    def clean_username(self):
        username = self.cleaned_data['username']
        if not re.match(r'^[a-zA-Z0-9_]+$', username):
            raise forms.ValidationError("Username can only contain letters, numbers, and underscores.")
        return username
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

views.py: فرم را رندر کنید

from django.shortcuts import render
from .forms import UsernameForm

def signup(request):
    if request.method == 'POST':
        form = UsernameForm(request.POST)
        if form.is_valid():
            return HttpResponse("Signup successful!")
    else:
        form = UsernameForm()
    return render(request, 'signup.html', {'form': form})
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

signup.html: فرم ساده HTML

method="post"> {% csrf_token %} {{ form.as_p }}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تستش کن:

  • وارد کنید valid_user123– کار می کند!
  • وارد کنید invalid$user!– یک پیام خطا خواهید دید.

نکات نهایی

  1. از ابزارهای آنلاین استفاده کنید: الگوهای regex خود را در سایت هایی مانند regex101.com تست کنید.
  2. خواندن Regex را بنویسید: استفاده کنید re.VERBOSE برای اضافه کردن نظرات برای وضوح:
   pattern = re.compile(r"""
       ^            # Start of string
       [a-zA-Z0-9_] # Letters, numbers, or underscores
       +            # One or more
       $            # End of string
   """, re.VERBOSE)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


چرا Regex را در جنگو یاد بگیریم؟

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

سوالاتی دارید؟ در نظرات زیر به من اطلاع دهید!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا