Django – User and authentication
Xin chào mọi người, tiếp tục series về Django framework của team, hôm nay chúng ta sẽ nghiên cứu đến User và authentication nhé!
User
Đối tượng User
Đối tượng User là thành phần quan trọng nhất của hệ thống authentication trong django. Thông thường nó sẽ đại diện cho người dùng tương tác với website của bạn, và có thể được sử dụng để phân quyền cho người dùng đó. Điều thú vị là, chỉ có duy nhất một class User trong hệ thống authentication của django. Ngay cả superuser cũng chỉ là một đối tượng của class User, nhưng có thêm các thuộc tính đặc biệt.
Các thuộc tính cơ bản của User bao gồm:
- username
- password
- first_name
- last_name
Khởi tạo superuser
Để khởi tạo superuser, chúng ta sử dụng lệnh createsuperuser:
$ python manage.py createsuperuser --username=ha_tb --email=ha_tb@septeni-technology.jp
Sau đó các bạn sẽ được yêu cầu nhập password, nhập xong là superuser của các bạn đã được tạo rồi. Còn nếu không có 2 option username và email trong câu lệnh, command prompt/terminal sẽ hỏi bạn các thông tin này trước khi hỏi đến password.
Khởi tạo user
Cách đơn giản nhất để tạo một user là sử dụng phương thức create_user() có sẵn:
from django.contrib.auth.models import User user = User.objects.create_user('ha_tb', 'ha_tb@septeni-technology.jp', 'password') user.save()
Cách thứ hai là tạo user trong django admin:
Nhấn vào nút ADD USER, nhập các thông tin cần thiết và Save thôi, rất đơn giản đúng không nào.
Xác thực user
Để xác thực user, hãy sử dụng phương thức authenticate() và truyền vào các thông tin credentials, mặc định là username và password. Nếu các thông tin này là đúng, nó sẽ trả về 1 đối tượng User tương ứng, còn nếu sai sẽ trả về None. Sau đó chúng ta chỉ việc kiểm tra kết quả trả về và quyết định các bước xử lý tiếp theo:
from django.contrib.auth import authenticate user = authenticate(username='ha_tb', password='password') if user is not None: # A backend authenticated the credentials else: # No backend authenticated the credentials
Login cho user
Thông thường sau khi xác thực user thành công, bạn sẽ muốn login cho người dùng đó. Để thực hiện việc này, django đã xây dựng sẵn cho bạn phương thức login(). Việc của bạn chỉ là truyền vào cho nó 1 request và 1 user, và django sẽ lưu user ID vào session giúp bạn:
from django.contrib.auth import authenticate, login def my_view(request): username = request.POST['username'] password = request.POST['password'] user = authenticate(request, username=username, password=password) if user is not None: login(request, user) # Redirect to a success page. ... else: # Return an 'invalid login' error message. ...
Logout cho user
Đã có login thì chắc chắn phải có logout đúng không? Và thậm chí còn đơn giản hơn login, hãy gọi phương thức logout() với đầu vào request, và toàn bộ dữ liệu session của request hiện tại sẽ được xoá sạch cho bạn:
from django.contrib.auth import logout def logout_view(request): logout(request) # Redirect to a success page.
Hãy chú ý rằng logout() sẽ không trả về lỗi nếu người dùng chưa login trước đó, vì vậy bạn sẽ không thể kiểm tra lỗi bằng cách này đâu!
Tổng kết
Vừa rồi chúng ta đã cùng nhau tìm hiểu những thao tác cơ bản nhất về user và authentication trong Django, bao gồm:
- Đối tượng User
- Cách tạo superuser
- Cách tạo user
- Xác thực user
- Login, logout cho user
Hy vọng bài viết đã giúp cho các bạn đang trong quá trình tìm hiểu Django framework có một cái nhìn tổng quan về user và authentication. Hẹn gặp lại các bạn trong các bài viết sau nhé!
Tài liệu tham khảo
https://docs.djangoproject.com/en/3.1/topics/auth/default/