2012-07-02 2 views
8

Я хотел бы создать/добавить новых пользователей в свое приложение в Django с помощью ввода пользователем. Я использую учетную запись по умолчанию, предоставленную django. Я пытаюсь добавить пользователей в учетную запись по умолчанию. Пример в https://docs.djangoproject.com/en/dev/topics/auth/:Принимая Пользовательский ввод для создания пользователей в Django

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

передает имя пользователя и пароль. Но я бы хотел, чтобы это произошло с пользовательским вводом. Как мне это сделать?

нужны некоторые указания ...

Я попробовал это, но это не похоже на работу:

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

Этот пример имеет очевидные ошибки. Какую логику вы хотите достичь с этой точки зрения? – jdi

+0

Я пытаюсь добавить нового пользователя, и если он добавлен, отправьте его на главную страницу, отправьте его обратно, чтобы добавить страницу пользователя ... – lakesh

+0

Я понимаю эту часть, но что вы пытаетесь выполнить с помощью аутентификации? Вы сохраняете объект 'user', который не существует, и затем вы аутентифицируете эту несуществующую переменную. – jdi

ответ

24

Первое, что вам нужно сделать, это создать ModelForm:

forms.py

from django.contrib.auth.models import User 

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

ModelForm автоматически строит вашу форму от модели, которую Вы предоставили. Он обрабатывает проверки на основе полей.

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

Если его запрос POST, мы создаем UserForm из значений POST. Затем мы проверяем, является ли его действительной формой. Если это так, мы создаем пользователя, иначе мы возвращаем форму с ошибками. Если его просьба не должности, мы посылаем чистую форму

шаблона

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

Этот ответ был полезен для меня, но он неполный. Шаблон формы должен содержать код токена CSRF и кнопку отправки. Я просто займусь этим и отредактирую их. Обратите внимание, что эта форма будет не совсем по умолчанию, но будет работать. Сделать это хорошо, это не вопрос. – steveha

+0

Дополнительная информация доступна здесь: http://www.tangowithdjango.com/book/chapters/login.html – steveha

0

Используйте форму. Воздух кодирования здесь:

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

это не добавляет пользователю права по умолчанию. Это похоже на создание новой модели? если я ошибаюсь, исправьте меня ... – lakesh

+0

@lakesh: Naddiseo предлагает использовать форму в вашем представлении, но этот ответ крайне расплывчатый, поэтому я не удивлен, что вы не совсем поняли это. Это не новая модель. – jdi

Смежные вопросы