2012-07-02 18 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作成することです。フィールドに基づいて検証を処理します。

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リクエストであれば、我々はPOST値からユーザーフォームを作成します。次に、有効なフォームかどうかを確認します。そうであれば、ユーザーを作成します。それ以外の場合は、エラーのあるフォームを返します。そのない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

はフォームを使用してください。空気はここにコーディング:

forms.py

from django.contrib.auth.models import User 

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

AのModelFormが自動的にフォームオフにあなたが提供するモデルを構築します。あなたがする必要がある

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

これはデフォルトの権利にユーザーを追加しません。これは新しいモデルの作成に似ていますか?もし私が間違っていれば、私を訂正してください... – lakesh

+0

@lakesh:Naddiseoはあなたの意見の中でフォームを使うことを提案していますが、この回答は非常に曖昧なので、あなたはそれにはっきりしていないのです。新しいモデルではありません。 – jdi

関連する問題