2010-12-10 29 views
6

Cách thiết lập đăng ký django rằng tài khoản cần được quản trị viên kích hoạt theo cách thủ công?Làm thế nào để thiết lập đăng ký django mà một tài khoản cần phải được kích hoạt bằng tay?

Sau khi người giữ tài khoản nhấp vào liên kết trong e-mail, tôi muốn gửi e-mail cho quản trị viên và anh ấy cũng cần nhấp vào liên kết và chỉ khi đó tài khoản sẽ hoạt động.

Có thể đăng ký django hay tôi cần sử dụng thứ gì đó khác và sử dụng cái gì?

Trả lời

5

đăng ký django cho phép bạn viết custom backend để xử lý các yêu cầu kích hoạt tùy chỉnh.

Vì vậy, những gì bạn cần làm là tạo chương trình phụ trợ của riêng bạn, tự mình thực hiện các chính sách registeractivate.

Dưới đây là một ví dụ về cách bạn có thể thực hiện các chức năng register:

def register(self, request, **kwargs): 
    username, email, password = kwargs['username'], kwargs['email'], kwargs['password1'] 
    if Site._meta.installed: 
     site = Site.objects.get_current() 
    else: 
     site = RequestSite(request) 
    new_user = RegistrationProfile.objects.create_inactive_user(username, email, 
                   password, site, 
                   send_email=False) 
    # send an email to the admins with user information 
    send_new_user_notification(new_user) # you would write this function 
    signals.user_registered.send(sender=self.__class__, 
           user=new_user, 
           request=request) 
    return new_user 

Điểm mấu chốt là để đảm bảo send_email được thiết lập để false; điều đó sẽ ngăn người dùng nhận được liên kết kích hoạt. Sau đó, bạn có thể quyết định xem email được gửi tới quản trị viên có liên kết kích hoạt hay bạn đang hài lòng với họ khi truy cập vào quản trị viên và chỉ cần chọn hộp "Đang hoạt động".

Nếu bạn sử dụng AuthenticationForm từ django.contrib.auth sau đó nó sẽ tự động từ chối người dùng có is_active là False, nhưng nếu bạn không sử dụng mà sau đó hãy chắc chắn để chạy kiểm tra sau đối với bất kỳ yêu cầu nơi người dùng tích cực là cần thiết:

def restricted_view(request): 
    if request.user and request.user.is_active: 
     #continue with the code 

Bạn cũng có thể viết trang trí của riêng mình (xem @login_required để tìm con trỏ). Lưu ý rằng @login_required không không kiểm tra is_active.

Các vấn đề liên quan