Biểu thức chính quy (regex) – nghe có vẻ phức tạp nhưng lại là công cụ đắc lực trong Django, giúp bạn tạo URL tùy chỉnh và xác thực dữ liệu người dùng một cách linh hoạt. Hãy cùng tìm hiểu cách regex đơn giản hóa việc phát triển web với Django.
Biểu thức chính quy là gì?
Biểu thức chính quy là các mẫu được sử dụng để khớp với văn bản. Trong Django, chúng cực kỳ hữu ích cho:
- Định tuyến URL tùy chỉnh (ví dụ: khớp định dạng cụ thể như năm hoặc tên người dùng trong URL).
- Xác thực biểu mẫu (ví dụ: đảm bảo số điện thoại hoặc tên người dùng đáp ứng các tiêu chí cụ thể).
Ví dụ, biểu thức chính quy này:
^[a-zA-Z]+$
... phù hợp với các chuỗi chỉ chứa chữ cái.
Tức là:
^
có nghĩa là "bắt đầu chuỗi".[a-zA-Z]
có nghĩa là "bất kỳ chữ cái nào (viết hoa hoặc viết thường)."+
có nghĩa là "một hoặc nhiều".$
có nghĩa là "kết thúc chuỗi".
Bây giờ, chúng ta hãy xem Django sử dụng phép thuật này như thế nào.
Thiết lập dự án Django của bạn
- Tạo ứng dụng Django nếu bạn chưa có:
django-admin startproject regex_demo cd regex_demo python manage.py startapp regex_app
- Thêm regex_appvào INSTALLED_APPStrong settings.py
Ví dụ 1: Định tuyến URL tùy chỉnh
Hãy tạo một mẫu URL khớp với năm gồm bốn chữ số như /articles/2024/
urls.py
: Xác định mẫu
from django.urls import re_path
from . import views urlpatterns = [ re_path(r'^articles/(?P<year>[0-9]{4})/$', views.articles_by_year, name='articles_by_year'),
]
Sau đây là những gì đang xảy ra:
r'^articles/(?P<year>[0-9]{4})/$'
: Các kết quả/articles/
khớp với số có bốn chữ số theo sau (ví dụ: 2024).(?P<year>[0-9]{4})
: Ghi lại năm vào một biến có tên là year.
views.py
: Xử lý yêu cầu
from django.http import HttpResponse def articles_by_year(request, year): return HttpResponse(f"Articles from the year {year}")
Truy cập /articles/2024/
vào trình duyệt của bạn và bạn sẽ thấy:
Articles from the year 2024
Ví dụ 2: Xác thực đầu vào biểu mẫu
Giả sử chúng ta muốn đảm bảo tên người dùng chỉ chứa chữ cái, số và dấu gạch dưới.
forms.py
: Thêm Logic xác thực
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
: Hiển thị biểu mẫu
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
: Biểu mẫu HTML đơn giản
<form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">Sign Up</button>
</form>
Hãy thử nghiệm:
- Nhập vào
valid_user123
— nó hoạt động! - Nhập —
invalid$user!
bạn sẽ thấy thông báo lỗi.
Lời khuyên cuối cùng
- Sử dụng công cụ trực tuyến: Kiểm tra mẫu biểu thức chính quy của bạn trên các trang web như regex101.com .
- Viết biểu thức chính quy có thể đọc được: Sử dụng re.VERBOSEđể thêm chú thích để rõ ràng hơn:
pattern = re.compile(r""" ^ # Start of string [a-zA-Z0-9_] # Letters, numbers, or underscores + # One or more $ # End of string """, re.VERBOSE)
Tại sao nên học Regex trong Django?
Regex cung cấp cho bạn các mẫu URL chính xác, xác thực đầu vào chống đạn và khả năng xử lý văn bản mạnh mẽ. Đây là công cụ bắt buộc phải có đối với bất kỳ nhà phát triển Django nào. Hãy thử nghiệm và sớm thôi, regex sẽ trở thành bản chất thứ hai.
Hy vọng thông tin trong bài viết sẽ giúp ích nhiều cho các bạn trong quá trình học tập và làm việc.