2012-03-23 16 views
19

Me he dado cuenta de que después de iniciar sesión con el registro de Django me redirige a accounts/profile/. De manera predeterminada, el registro de Django url.py no maneja accounts/profile/, así que necesito crear el mío.¿Dónde hay un buen lugar para trabajar en cuentas/perfil en Django con la aplicación de registro Django?

En realidad esta pregunta es triple:

  1. ¿Por qué después de iniciar la sesión, se redirige a accounts/profile/? ¿Existe alguna manera de cambiar esto? Preferiblemente, después de iniciar sesión con éxito me gustaría que Django redirija a la página antes de la página de inicio de sesión.
  2. Si tuviera que crear mi propia vista y plantilla para accounts/profile/, ¿dónde debería ponerla? Django's built-in users (auth_user) se comparte entre todas las aplicaciones de Django dentro de un proyecto, así que ¿debo colocar el view.py en la carpeta del proyecto y no dentro de la carpeta de la aplicación?
  3. ¿O bien Django profile realmente se ocupa de todo esto account/profiles/? Ya extendí la clase User de Django con mi propio UserProfile, pero es más como campos adicionales para la tabla User que como un "perfil" real (no creé avatares ni nada de eso, solo cosas simples como direcciones y números de teléfono, pero la mayoría importante, algunos tipos de usuario personalizados de los que depende mi aplicación).

Respuesta

14

¿Por qué después de iniciar sesión, redirige a cuentas/perfil /? ¿Hay una forma de cambiar eso? Preferiblemente después de iniciar sesión con éxito me gustaría como Django para redirigir a la página antes de la página de inicio de sesión.

Sólo cambia la configuración LOGIN_REDIRECT_URL

Si tuviera que crear mi propio punto de vista y la plantilla de cuentas/perfil /, entonces, ¿dónde lo pongo? Los usuarios integrados de Django (auth_user) son compartidos entre todas las aplicaciones de Django dentro de un proyecto, así que ¿debo colocar el view.py en la carpeta del proyecto y no dentro de la carpeta de la aplicación?

Me gusta crear una aplicación llamada "project_specific" en cada proyecto. Ahí es donde pongo todas las cosas que no deben ser reutilizables y que une muchas aplicaciones.

También puede crear un views.py a nivel de proyecto, pero eso es un poco complicado en comparación con la creación de una aplicación específica para el proyecto.

En realidad, no importa dónde lo pongas.

¿O el perfil de Django realmente se ocupa de todo este cuenta/perfil/cosa? Ya extendí la clase User de Django con mi propio UserProfile, pero es más como campos adicionales para la tabla User que como un "perfil" real (no creé avatares ni nada así, solo cosas simples como direcciones y números de teléfono , pero lo más importante, algunos tipos de usuarios personalizados de los que depende mi aplicación).

Esa no es la forma de agregar campos de usuario adicionales.Recomiendo que lea los documentos en Storing additional information about users.

6

Para una aproximación mínima, que no requiere una aplicación independiente,

  1. Crear una plantilla y lo llaman profile.html o lo que quieras

    <p>This is your profile, {{ user.username }}.</p> 
    
  2. En urls.py, añadir un patrón de URL que apunta a la plantilla de perfil, marcarlo login_required, y dar la url de un nombre:

    # ... 
    
    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. En settings.py, agregue la siguiente línea:

    LOGIN_REDIRECT_URL = 'user_profile' 
    

Esta línea le dice Djang o realizar una búsqueda URL inversa por nombre al redirigir a un usuario después de un inicio de sesión. Sin esta línea, su aplicación seguirá funcionando, pero será frágil porque se basa en una URL arbitrariamente codificada que Django configura de manera implícita. Con esta línea, si usted u otra persona decide que los perfiles de usuario deben estar en /me/, puede cambiar la URL en el paso 2 sin romper su aplicación.

Cuestiones relacionadas