2012-07-02 6 views
8

Vorrei creare/aggiungere nuovi utenti alla mia app in Django utilizzando l'input dell'utente. Sto usando l'accesso predefinito fornito da Django. Sto cercando di aggiungere utenti al login predefinito. L'esempio in https://docs.djangoproject.com/en/dev/topics/auth/:Prendere l'input dell'utente per creare utenti in Django

>>> from django.contrib.auth.models import User 
>>> user = User.objects.create_user('john', '[email protected]', 'john password') 

passa il nome utente e la password. Ma mi piacerebbe che ciò accadesse con l'input dell'utente. Come faccio a fare questo?

bisogno di un orientamento ...

Ho provato questo, ma non sembra funzionare:

def lexusadduser(request): 
    """ 
    add user 
    """ 
    if request.method == "POST": 
     user.save() 

     auth_user = authenticate(username=user.username,password=user.password) 

     if auth_user is not None: 
      lexusmain(request) 
     else: 
      return render('adduser.html') 
+0

Questo esempio ha errori evidenti. Che logica vuoi raggiungere con questa visione? – jdi

+0

Sto provando ad aggiungere un nuovo utente e se aggiunto lo mando alla pagina principale altrimenti lo rimando ad aggiungere la pagina utente ... – lakesh

+0

Capisco quella parte, ma cosa stai cercando di ottenere con l'autenticazione? Stai salvando un oggetto 'utente' che non esiste e quindi stai autenticando quella variabile inesistente. – jdi

risposta

24

prima cosa che devi fare è creare un ModelForm:

forms.py

from django.contrib.auth.models import User 

class UserForm(ModelForm): 
    class Meta: 
     model = User 
     fields = ('username', 'email', 'password') 

Un ModelForm crea automaticamente il modulo fuori un modello che fornisci. Gestisce le convalide in base ai campi.

views.py

from forms import UserForm 
from django.contrib.auth import login 
from django.http import HttpResponseRedirect 

def lexusadduser(request): 
    if request.method == "POST": 
     form = UserForm(request.POST) 
     if form.is_valid(): 
      new_user = User.objects.create_user(**form.cleaned_data) 
      login(new_user) 
      # redirect, or however you want to get to the main view 
      return HttpResponseRedirect('main.html') 
    else: 
     form = UserForm() 

    return render(request, 'adduser.html', {'form': form}) 

Se la sua una richiesta POST, creiamo un form dai valori POST. Quindi controlliamo se è un modulo valido. Se lo è, creiamo l'utente, altrimenti restituiamo il modulo con gli errori. Se la sua non è una richiesta POST, inviamo una forma pulita

modello

<form method="post" action=""> 
    {% csrf_token %} 
    {{ form }} 
    <input type="submit" value="Create new user account" /> 
</form> 
+0

Questa risposta mi è stata utile, ma è incompleta. Il modello di modulo dovrebbe includere il codice token CSRF e un pulsante di invio. Ho intenzione di andare avanti e modificarli. Nota che questo modulo non sarà carino per impostazione predefinita, ma funzionerà. Renderlo bello non rientra nella portata della domanda. – steveha

+0

Maggiori informazioni disponibili qui: http://www.tangowithdjango.com/book/chapters/login.html – steveha

0

usare una forma. Aria codifica qui:

class SignupForm(forms.Form): 
    username = forms.CharField() 
    email = forms.EmailField() 
    password = forms.CharField(widget=forms.PasswordInput) 
+0

questo non aggiunge l'utente al diritto predefinito. Questo è come creare un nuovo modello giusto? se ho torto, correggimi ... – lakesh

+0

@lakesh: Naddiseo suggerisce di usare un modulo nella tua vista, ma questa risposta è estremamente vaga, quindi non mi sorprende che non ti sia chiaro. Non è un nuovo modello. – jdi

Problemi correlati