2013-05-29 34 views
8

Tôi đang làm việc trên một ứng dụng Django sẽ có hai loại người dùng: Quản trị viên và Người dùng. Cả hai đều là các nhóm trong dự án của tôi, và tùy thuộc vào nhóm mà cá nhân đăng nhập thuộc về tôi muốn chuyển hướng chúng đến các trang riêng biệt. Ngay bây giờ tôi có điều này trong settings.py tôiDjango - Chuyển hướng đăng nhập có điều kiện

LOGIN_REDIRECT_URL = 'admin_list' 

này chuyển hướng tất cả người dùng đăng nhập vào 'admin_list', nhưng quan điểm là chỉ có thể cho các thành viên của nhóm quản trị viên - nếu không nó sẽ trả về một 403. Như cho chế độ xem đăng nhập, tôi chỉ sử dụng một Django cung cấp. Tôi đã thêm này để tập urls.py chính của tôi để sử dụng những quan điểm:

url(r'^accounts/', include('django.contrib.auth.urls')), 

Làm thế nào tôi có thể làm điều này để chỉ các thành viên của nhóm quản trị viên là chuyển hướng đến quan điểm này, và mọi người khác được chuyển hướng đến một quan điểm khác nhau?

+0

Bạn có đang sử dụng chế độ xem đăng nhập của riêng mình hoặc sử dụng lại chế độ xem chung của Django không? Nếu chế độ xem của riêng bạn, hãy hiển thị cho chúng tôi chế độ xem. –

+1

Tôi đang sử dụng chế độ xem đăng nhập chung của Django, chỉ sử dụng url này trong url urls.py chính của tôi (r '^ accounts /', bao gồm ('django.contrib.auth.urls')), –

+2

Cập nhật câu hỏi với thông tin đó . Không ai có thể giúp bạn nếu bạn không cung cấp tất cả thông tin cần thiết để gỡ lỗi nó. –

Trả lời

16

Tạo chế độ xem riêng biệt chuyển hướng người dùng dựa trên việc họ có nằm trong nhóm quản trị hay không.

from django.shortcuts import redirect 

def login_success(request): 
    """ 
    Redirects users based on whether they are in the admins group 
    """ 
    if request.user.groups.filter(name="admins").exists(): 
     # user is an admin 
     return redirect("admin_list") 
    else: 
     return redirect("other_view") 

Thêm chế độ xem để urls.py của bạn,

url(r'login_success/$', views.login_success, name='login_success') 

sau đó sử dụng nó để thiết lập LOGIN_REDIRECT_URL của bạn.

LOGIN_REDIRECT_URL = 'login_success' 
+2

Tôi đã thêm phần sau vào myapp/urls.py và nó hoạt động hoàn hảo! url (r'login_success/$ ', views.login_success, name =' login_success '), –

3

tôi sử dụng một cái nhìn trung gian để thực hiện điều tương tự:

LOGIN_REDIRECT_URL = "/wherenext/" 

sau đó trong urls.py tôi:

(r'^wherenext/$', views.where_next), 

sau đó trong giao diện:

@login_required 
def wherenext(request): 
    """Simple redirector to figure out where the user goes next.""" 
    if request.user.is_staff: 
     return HttpResponseRedirect(reverse('admin-home')) 
    else: 
     return HttpResponseRedirect(reverse('user-home')) 
Các vấn đề liên quan