2012-07-02 23 views
8

Chciałbym utworzyć/dodać nowych użytkowników do mojej aplikacji w Django za pomocą danych wprowadzonych przez użytkownika. Używam domyślnego loginu podanego przez django. Próbuję dodać użytkowników do domyślnego logowania. Przykład w https://docs.djangoproject.com/en/dev/topics/auth/:Wprowadzanie danych użytkownika do tworzenia użytkowników w Django

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

przekazuje nazwę użytkownika i hasło. Ale chciałbym, aby tak się stało przy wprowadzaniu danych przez użytkownika. Jak mam to zrobic?

Potrzebujesz kilku wskazówek ...

próbowałem tego, ale nie wydaje się działać:

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

Ten przykład ma oczywistych błędów. Jaką logikę chcesz osiągnąć dzięki temu widokowi? – jdi

+0

Próbuję dodać nowego użytkownika, a jeśli go dodam, wyślę go na stronę główną, odeślij go, aby dodać stronę użytkownika ... – lakesh

+0

Rozumiem tę część, ale co próbujesz osiągnąć dzięki uwierzytelnianiu? Zapisujesz obiekt 'user', który nie istnieje, a następnie uwierzytelniasz nieistniejącą zmienną. – jdi

Odpowiedz

24

Pierwszą rzeczą, którą musisz zrobić, to stworzyć ModelForm:

forms.py

from django.contrib.auth.models import User 

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

ModelForm automatycznie buduje swoją postać od modelu podasz. Obsługuje walidacje oparte na polach.

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

Jeśli jego żądanie POST, możemy utworzyć UserForm z wartościami POST. Następnie sprawdzamy, czy jest to poprawny formularz. Jeśli tak, tworzymy użytkownika, w przeciwnym razie zwracamy formularz z błędami. Jeżeli nie jest to żądanie POST, wysyłamy czystą formę

szablonu

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

Ta odpowiedź była przydatna, ale jest niekompletna. Szablon formularza powinien zawierać kod tokenu CSRF i przycisk przesyłania. Zamierzam po prostu je dalej edytować. Pamiętaj, że ten formularz nie będzie domyślnie ładny, ale zadziała. Sprawienie, by wyglądało dobrze, nie wchodzi w zakres pytania. – steveha

+0

Więcej informacji dostępnych tutaj: http://www.tangowithdjango.com/book/chapters/login.html – steveha

0

pomocą formularza. kodowanie tu powietrze:

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

nie powoduje to dodania użytkownika do domyślnego prawa. To jest jak tworzenie nowego modelu, prawda? jeśli się mylę, popraw mnie ... – lakesh

+0

@lakesh: Naddiseo sugeruje użycie formularza w twoim widoku, ale ta odpowiedź jest bardzo nieprecyzyjna, więc nie dziwię się, że nie wiesz o tym. To nie jest nowy model. – jdi

Powiązane problemy