2012-03-23 11 views
19

Ho notato che dopo aver effettuato l'accesso con la registrazione Django, mi viene reindirizzato a accounts/profile/. Per impostazione predefinita, la registrazione di Django url.py non gestisce accounts/profile/, quindi ho bisogno di crearne una mia.Dove è un buon posto dove lavorare su account/profilo in Django con l'app di registrazione Django?

In realtà questa domanda è triplice:

  1. Perché dopo il login, reindirizza a accounts/profile/? C'è un modo di cambiarlo? Preferibilmente dopo aver effettuato l'accesso mi piacerebbe che Django reindirizzasse nuovamente alla pagina prima della pagina di accesso.
  2. Se dovessi creare la mia vista e modello per accounts/profile/, allora dove dovrei inserirlo? Lo strumento integrato di Django users (auth_user) è condiviso tra tutte le app Django all'interno di un progetto, quindi devo inserire lo view.py nella cartella del progetto e non nella cartella dell'app?
  3. Oppure Django profile si occupa effettivamente di tutta questa cosa account/profiles/? Ho già esteso la classe User di Django con il mio, ma è più simile ai campi aggiuntivi alla tabella User di un vero "profilo" (non ho creato avatar o qualcosa del genere, solo cose semplici come indirizzi e numeri di telefono, ma la maggior parte importante, alcuni tipi di utenti personalizzati da cui dipende la mia app).

risposta

14

Perché dopo l'accesso reindirizza a account/profilo /? C'è un modo per cambiarlo? Preferibilmente dopo aver effettuato correttamente l'accesso, mi piacerebbe che come Django reindirizzasse nuovamente alla pagina prima della pagina di accesso.

basta cambiare l'impostazione LOGIN_REDIRECT_URL

Se dovessi creare il mio punto di vista e il modello per gli account/profile /, quindi dove dovrei metterla? Gli utenti incorporati di Django (auth_user) sono condivisi tra tutte le app Django all'interno di un progetto, quindi dovrei posizionare il file view.py nella cartella del progetto e non nella cartella dell'app?

Mi piace creare un'applicazione chiamata "specifica_progetto" in ogni progetto. È lì che metto tutte le cose che non sono destinate a essere riusabili e che accoppiano molte app.

È anche possibile creare un views.py a livello di progetto, ma è un po 'disordinato rispetto a un'app specifica per il progetto.

In realtà non importa dove lo metti.

Oppure il profilo Django si occupa in realtà di tutto questo account/profili/cosa ? Ho già esteso la classe User di Django con il mio UserProfile, ma è più simile ai campi aggiuntivi della tabella Utente di un vero "profilo" (non ho creato avatar o altro così, solo cose semplici come indirizzi e numeri di telefono , ma soprattutto , alcuni tipi di utenti personalizzati da cui dipende la mia app).

Questo non è il modo di aggiungere campi utente aggiuntivi.Ti consiglio di leggere i documenti su Storing additional information about users.

6

Per un approccio minimale che non richiede un'applicazione stand-alone,

  1. Creare un modello e chiamarlo profile.html o qualsiasi cosa tu voglia.

    <p>This is your profile, {{ user.username }}.</p> 
    
  2. In urls.py, aggiungere un motivo URL che punta al tuo profilo modello, segnarlo login_required, e dare l'url un nome:

    # ... 
    
    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. In settings.py, aggiungere la seguente riga:

    LOGIN_REDIRECT_URL = 'user_profile' 
    

Questa linea dice Djang o per eseguire una ricerca inversa di URL per nome quando si reindirizza un utente dopo un accesso. Senza questa linea, la tua app funzionerà ancora, ma sarà fragile perché si basa su un URL arbitrario hard-coded che è configurato implicitamente da Django. Con questa linea, se tu o qualcun altro decidi che i profili utente dovrebbero essere a /me/, puoi cambiare l'URL nel passaggio 2 senza rompere la tua app.

Problemi correlati