Professional Documents
Culture Documents
Mọi vấn đề về lỗi website làm ảnh hưởng đến bạn hoặc thắc mắc, mong muốn khóa học mới, nhằm hỗ trợ cải thiện Website. Các bạn vui lòng phản hồi
đến Fanpage How Kteam nhé!
Ghi chú
Nội dung bài viết bạn đang xem được update từ tháng 06/2019. Vì vậy sẽ có đôi chút khác biệt giữa VIDEO và NỘI DUNG BÀI VIẾT.
Chúng ta sẽ có nhiều cập nhập hơn về cả bài viết lẫn video trong thời gian tới. Nhớ like / share hoặc đánh giá 5 sao để Kteam có động lực nhé!
Dẫn nhập
Ở bài trước, Kteam đã hướng dẫn các bạn xong cách UPLOAD FILE ẢNH VÀO TRANG WEB ĐƯỢC LÀM BẰNG DJANGO MVC.
Trong bài này Kteam hướng dẫn cách tạo Form đăng ký tài khoản trong Python Django.
Nội dung
Để theo dõi bài này tốt nhất, bạn nên xem qua bài:
Django cung cấp một loạt tool và thư viện để giúp chúng ta có thể xây dựng những forms để quản lý thông tin mà user gửi đi, thực hiện và trả về
thông tin đến người gửi.
Copyright © Howkteam.com
Tạo Form đăng ký tài khoản trong Python Django 2|6
Có khá nhiều field của bảng user nhưng ta sẽ tập trung ở những phần sau:
groups: là nhóm user để admin có thể đưa user vào nhóm nào, mỗi group admin có thể phân quyền một số chức năng nhất định dành cho
nhóm đó. Phân quyền thương là quyền hạn như cho phép thêm, sửa hay xóa đến bảng nào đó.
user permission: quyền hạn user, cũng là 1 cách phân quyền theo cá nhân user thay vì group.
last join: lần đăng nhập cuối cùng
date joined: ngày tham gia
Bây giờ Kteam sẽ tạo Form có các field điền thông tin username, password và email để tạo user:
Copyright © Howkteam.com
Tạo Form đăng ký tài khoản trong Python Django 3|6
2. Ở file forms. Ta sẽ tạo class RegistrationForm kế thừa thư viện forms.Form và khai báo các field điền thông tin
Python:
class RegistrationForm(forms.Form):
username = forms.CharField(label='Tài khoản', malength=30)
email = forms.EmailField(label='Email')
password1 = forms.CharField(label='Mật khẩu', widget=forms.PasswordInput())
password2 = forms.CharField(label='Nhập lại mật khẩu', widget=forms.PasswordInput())
Tiếp theo, ta sẽ phải viết các function kiểm tra giá trị nhập vào của người dùng. Ta sẽ dùng cú pháp đặt tên bên dưới để khi kiểm tra thì form sẽ
biết để gọi các function đó:
[ clean_<tên field> ]
Python:
class RegistrationForm(forms.Form):
username = forms.CharField(label='Tài khoản', malength=30)
email = forms.EmailField(label='Email')
password1 = forms.CharField(label='Mật khẩu', widget=forms.PasswordInput())
password2 = forms.CharField(label='Nhập lại mật khẩu', widget=forms.PasswordInput())
def clean_password2(self):
if 'password1' in self.cleaned_data:
password1 = self.cleaned_data['password1']
password2 = self.cleaned_data['password2']
if password1 == password2 and password1:
return password2
raise forms.ValidationError("Mật khẩu không hợp lệ")
def clean_username(self):
username = self.cleaned_data['username']
if not re.search(r'^\w+&', username):
raise forms.ValidationError("Tên tài khoản có kí tự đặc biệt")
try:
User.objects.get(username=username)
except User.DoesNotExist:
return username
raise forms.ValidationError("Tài khoản đã tồn tại")
1. clean_password2: phương thức kiểm tra dữ liệu nhập lại mật khẩu, trước tiên kiểm tra password1 đã nhập chưa, nếu rồi thì lấy thông tin
password1 và password2 thông qua thuộc tính cleaned_data để kiểm tra. Nếu 2 giá trị bằng nhau và không có dấu cách thì xem như hợp lệ,
lúc đó ta sẽ return giá trị password2 để báo Form là thông tin không sai. Ngược lại toàn bộ điều kiện thì raise lỗi là “Mật khẩu không hợp
lệ”
2. clean_username: phương thức kiểm tra username, đầu tiên lấy giá trị username ra, kiểm tra giá trị có kí tự đặc biệt không, nếu có thì trả lỗi.
Nếu không thì kiểm tra giá trị username đã tồn tại trong bảng user chưa để tránh trùng tên, ta để trong try except, nếu except bắt lỗi
User.DoesNotExist thì chưa có tài khoản nào trùng tên thì return giá trị về. Nếu không có lỗi đồng nghĩa đã tồn tại username đó, ta raise lỗi
là “Tài khoản đã tồn tại”
Python:
Copyright © Howkteam.com
Tạo Form đăng ký tài khoản trong Python Django 4|6
class RegistrationForm(forms.Form):
username = forms.CharField(label='Tài khoản', malength=30)
email = forms.EmailField(label='Email')
password1 = forms.CharField(label='Mật khẩu', widget=forms.PasswordInput())
password2 = forms.CharField(label='Nhập lại mật khẩu', widget=forms.PasswordInput())
def clean_password2(self):
if 'password1' in self.cleaned_data:
password1 = self.cleaned_data['password1']
password2 = self.cleaned_data['password2']
if password1 == password2 and password1:
return password2
raise forms.ValidationError("Mật khẩu không hợp lệ")
def clean_username(self):
username = self.cleaned_data['username']
if not re.search(r'^\w+$', username):
raise forms.ValidationError("Tên tài khoản có kí tự đặc biệt")
try:
User.objects.get(username=username)
except User.DoesNotExist:
return username
raise forms.ValidationError("Tài khoản đã tồn tại")
def save(self):
User.objects.create_user(username=self.cleaned_data['username'], email=self.cleaned_data['email'],
password=self.cleaned_data['password1'])
Python:
def register(request):
form = RegistrationForm()
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/')
return render(request, 'pages/register.html', {'form': form})
Copyright © Howkteam.com
Tạo Form đăng ký tài khoản trong Python Django 5|6
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<center>
<form action="." method="POST">
{% csrf_token %}
{{form.as_p}}
<input type="submit" value="Đăng ký"/>
</form>
</center>
</body>
</html>
Ta tạo tag form có action=”.” đồng nghĩa khi nhấn vào submit form thì gọi là url hiện tại, tuy nhiên sẽ dùng method POST để cho server biết
là client vừa gửi yêu cầu đăng ký tài khoản
Kteam thêm {% csrf_token %} để tạo bảo mật tránh kỹ thuật tấn công csrf, các bạn nào muốn quan tâm về bảo mật thì có thể tự tìm hiểu. Ở
Django, các form bắt buộc có đoạn mã này
ta gọi form được truyền vào từ render, dùng as_p để các field xuống dòng
thêm input type là submit để gửi submit form
urlpatterns = [
path('', views.index),
path('contact/', views.contact, name='contact'),
path('register/', views.register, name="register"),
]
Bây giờ, ta sẽ khởi động server và vào đường dẫn bên dưới sẽ thấy form được Django thiết kế ra:
http://localhost:8000/register/
Copyright © Howkteam.com
Tạo Form đăng ký tài khoản trong Python Django 6|6
Tiếp theo, Kteam cố tình nhập lỗi để xem form có hiện cảnh báo không:
Cuối cùng, Kteam sẽ nhập đúng thông tin để user có được tạo ra không:
Kết luận
Trong bài này, chúng ta đã tìm hiểu cách Tạo Form đăng ký tài khoản.
Bài sau chúng ta sẽ cùng tìm hiểu về cách HƯỚNG DẪN XỬ LÝ LOGIN VÀ LOGOUT USER
Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Và đừng quên “Luyện tập – Thử
Thách – Không ngại khó”
Copyright © Howkteam.com