2012-03-23 29 views
19

Tôi nhận thấy rằng sau khi đăng nhập bằng đăng ký Django, nó chuyển hướng tôi đến accounts/profile/. Theo mặc định, đăng ký của Django url.py không xử lý accounts/profile/, vì vậy tôi cần phải tạo của riêng mình.Đâu là một nơi tốt để làm việc trên tài khoản/hồ sơ tại Django với ứng dụng đăng ký Django?

Thực ra câu hỏi này là ba lần:

  1. Tại sao sau khi đăng nhập, nó chuyển hướng đến accounts/profile/? Có cách nào để thay đổi điều đó không? Tốt nhất là sau khi đăng nhập thành công, tôi muốn Django chuyển hướng trở lại trang trước trang đăng nhập.
  2. Nếu tôi tạo chế độ xem và mẫu của riêng mình cho accounts/profile/, thì tôi nên đặt nó ở đâu? Django được xây dựng trong users (auth_user) được chia sẻ giữa tất cả các ứng dụng Django bên trong một dự án, vì vậy tôi nên đặt view.py trong thư mục dự án chứ không phải bên trong thư mục ứng dụng?
  3. Hoặc không Django profile thực sự đảm nhận toàn bộ điều này account/profiles/? Tôi đã mở rộng lớp User của Django với số UserProfile của Django, nhưng nó giống như các trường bổ sung cho bảng User hơn là một "hồ sơ" thực tế (tôi không tạo ra hình đại diện hay bất cứ thứ gì như vậy, chỉ là những thứ đơn giản như địa chỉ và số điện thoại) quan trọng, một số loại người dùng tùy chỉnh mà ứng dụng của tôi phụ thuộc vào).

Trả lời

14

Tại sao sau khi đăng nhập, nó chuyển hướng đến tài khoản/hồ sơ /? Có một cách để thay đổi điều đó không? Tốt nhất là sau khi đăng nhập thành công, tôi sẽ như Django để chuyển hướng trở lại trang trước trang đăng nhập.

Chỉ cần thay đổi thiết lập LOGIN_REDIRECT_URL

Nếu tôi là để tạo ra cái nhìn của riêng tôi và mẫu cho các tài khoản/profile /, sau đó nơi tôi nên đặt nó? Người dùng tích hợp của Django (auth_user) là được chia sẻ giữa tất cả các ứng dụng Django bên trong một dự án, vì vậy tôi nên đặt khung nhìn view.py trong thư mục dự án chứ không phải bên trong thư mục ứng dụng?

Tôi muốn tạo ứng dụng có tên là "project_specific" trong mọi dự án. Đó là nơi tôi đặt tất cả những thứ không có nghĩa là có thể tái sử dụng được và các cặp vợ chồng có nhiều ứng dụng.

Bạn cũng có thể tạo views.py ở cấp dự án, nhưng đó là loại lộn xộn so với việc tạo một ứng dụng cụ thể cho dự án.

Trong thực tế, không quan trọng bạn đặt nó ở đâu.

Hoặc tiểu sử Django có thực sự quản lý toàn bộ tài khoản/tiểu sử/điều này không? Tôi đã mở rộng lớp User của Django với UserProfile của riêng tôi, nhưng nó giống như các trường bổ sung cho bảng Người dùng so với một "hồ sơ" thực tế (tôi đã không tạo hình đại diện hoặc bất kỳ thứ gì). , nhưng quan trọng nhất, một số loại người dùng tùy chỉnh mà ứng dụng của tôi phụ thuộc vào).

Đó không phải là cách thêm trường người dùng bổ sung.Tôi khuyên bạn nên đọc tài liệu trên Storing additional information about users.

6

Đối với một cách tiếp cận tối thiểu mà không đòi hỏi một ứng dụng độc lập,

  1. Tạo mẫu và gọi nó là profile.html hoặc bất cứ điều gì bạn muốn.

    <p>This is your profile, {{ user.username }}.</p> 
    
  2. Trong urls.py, thêm một mẫu url trỏ đến mẫu hồ sơ của bạn, đánh dấu nó login_required, và cung cấp cho các url một cái tên:

    # ... 
    
    from django.views.generic import TemplateView 
    from django.contrib.auth.decorators import login_required 
    
    urlpatterns = [ 
        # ... 
        url(r'^accounts/profile/$', TemplateView.as_view(template_name='profile.html'), name='user_profile'), 
        # ... 
    ] 
    
  3. Trong settings.py, thêm dòng sau:

    LOGIN_REDIRECT_URL = 'user_profile' 
    

Dòng này nói với Djang o thực hiện tra cứu URL ngược theo tên khi chuyển hướng người dùng sau khi đăng nhập. Nếu không có dòng này, ứng dụng của bạn sẽ vẫn hoạt động nhưng nó sẽ dễ vỡ vì nó dựa trên một URL mã hóa tùy ý được cấu hình ngầm bởi Django. Với dòng này, nếu bạn hoặc người khác quyết định rằng hồ sơ người dùng phải ở số /me/, bạn có thể thay đổi URL ở bước 2 mà không vi phạm ứng dụng của bạn.

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