2012-07-02 25 views
8

Me gustaría crear/agregar nuevos usuarios a mi aplicación en Django utilizando la entrada del usuario. Estoy usando el inicio de sesión predeterminado proporcionado por django. Estoy intentando agregar usuarios al inicio de sesión predeterminado. El ejemplo de la https://docs.djangoproject.com/en/dev/topics/auth/:Toma de entrada de usuario para crear usuarios en Django

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

pasa el nombre de usuario y contraseña. Pero me gustaría que esto suceda con la entrada del usuario. ¿Cómo hago esto?

necesitan un poco de orientación ...

He intentado esto, pero no parece funcionar:

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

Este ejemplo tiene errores obvios. ¿Qué lógica quieres lograr con esta vista? – jdi

+0

Estoy tratando de agregar un nuevo usuario y si lo agregué lo envié a la página principal o lo envié de regreso para agregar la página de usuario ... – lakesh

+0

Entiendo esa parte, pero ¿qué intenta lograr con la autenticación? Está guardando un objeto 'usuario' que no existe, y luego está autenticando esa variable inexistente. – jdi

Respuesta

24

Lo primero que hay que hacer es crear un ModelForm:

forms.py

from django.contrib.auth.models import User 

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

Un ModelForm construye automáticamente su forma fuera un modelo que proporcione. Maneja las validaciones basadas en los campos.

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}) 

Si es una solicitud POST, creamos un formulario de usuario a partir de los valores POST. Luego verificamos si es una forma válida. Si es así, creamos el usuario, de lo contrario devolvemos el formulario con los errores. Si no es una petición POST, enviamos una forma limpia

plantilla

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

Esta respuesta fue útil para mí, pero está incompleta. La plantilla de formulario debe incluir el código de token CSRF y un botón de envío. Voy a continuar y editarlos. Tenga en cuenta que este formulario no será bonito por defecto, pero funcionará. Hacer que se vea bien no está en el alcance de la pregunta. – steveha

+0

Más información disponible aquí: http://www.tangowithdjango.com/book/chapters/login.html – steveha

0

utilizar una forma. Aire codificación aquí:

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

esto no agrega usuario al derecho predeterminado. Esto es como crear un nuevo modelo ¿verdad? si estoy equivocado, corrígeme ... – lakesh

+0

@lakesh: Naddiseo sugiere usar un formulario dentro de tu vista, pero esta respuesta es extremadamente vaga, así que no me sorprende que no seas claro. No es un nuevo modelo. – jdi

Cuestiones relacionadas