Làm cách nào để kiểm tra xem người dùng này là ẩn danh hay thực sự là người dùng trên hệ thống của tôi?


81
def index(request):
    the_user = request.user

Trong Django, làm cách nào để biết đó có phải là người dùng thực hay không? Tôi đã thử:

if the_user: nhưng "AnonymousUser" vẫn ở đó ngay cả khi không có ai đăng nhập. Vì vậy, nó luôn trả về true và điều này không hoạt động.

Câu trả lời:


136

Bạn có thể kiểm tra nếu request.user.is_anonymoustrả lại True.


20
Hãy nhận biết rằng trong views.pybạn nên sử dụng request.user.is_anonymous()vì nó là một chức năng, trong khi ở các mẫu bạn nên sử dụng{{user.is_anonymous}}
amigcamel

11
Có vẻ như trong Django 1.9 thì đúng hơn is_authenticated(): vui lòng xem docs.djangoproject.com/en/1.9/topics/auth/default/…
Paolo Stefan

11
từ Django 1.10, is_anonymous không còn là một phương pháp (chỉ là một tài sản)
maxbellec

2
Tôi phải đồng tình với Paolo Stefan, phương pháp mà bạn muốn sử dụng là is_authenticated(). Xem thêm thegarywilson.com/blog/2006/is_authenticated-vs-is_anonymous
Al Sweigart 21/1017

3
Khuyến nghị hiện tại là sử dụng request.user.is_authenticated, là một thuộc tính trong Django 1.10+, giống như is_anonymoushiện tại - xem docs.djangoproject.com/en/dev/ref/contrib/auth/… . Lưu ý rằng nếu bạn cũng đang sử dụng Django Guardian thì các thuộc tính này sẽ không hoạt động như bạn nghĩ - hãy xem django-guardian.readthedocs.io/en/stable/configuration.html
rhunwicks

18

Một sự thay thế cho

if user.is_anonymous():
    # user is anon user

bằng cách thử nghiệm để xem id của đối tượng người dùng là gì:

if user.id == None:
    # user is anon user
else:
    # user is a real user

xem https://docs.djangoproject.com/en/dev/ref/contrib/auth/#anonymous-users


4
có vẻ là một ý tưởng tồi. user.is_anonymous () sẽ tiếp tục làm việc trong các phiên bản mới, user.id có thể không, tùy thuộc vào việc triển khai trong tương lai
maxbellec

Ngoài ra, hãy lưu ý rằng nếu bạn đang sử dụng Django Guardian thì người dùng ẩn danh cũng sẽ có một id - xem django-guardian.readthedocs.io/en/stable/… .
rhunwicks

Và khuyến cáo hiện nay theo docs.djangoproject.com/en/dev/ref/contrib/auth/... là sử dụng User.is_authenticated
rhunwicks

Thật không may, điều này không hoạt động. Đó là điều đầu tiên tôi đã thử. Có vẻ như người dùng "ẩn danh" xuất hiện khi sử dụng người dùng == Không có (và các biến thể khác).
Harlin

4

Tôi biết tôi đang đào mộ một chút ở đây, nhưng một tìm kiếm trên Google đã đưa tôi đến trang này.

Nếu chế độ xem của bạn yêu cầu người dùng phải đăng nhập, bạn có thể triển khai trình trang trí @login_required:

from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):

Điều này sẽ không hoạt động trong chế độ xem "đăng nhập" chứng khoán nếu không có một số tùy chỉnh.
Harlin

0

Tôi đã gặp sự cố tương tự ngoại trừ vấn đề này xảy ra trên trang mà login_redirect_url đã được gửi đến. Tôi đã phải đưa vào mẫu:

{% if user.is_authenticated %}
    Welcome Back, {{ username }}
{% endif %}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.