8

ユーザー入力を使用して、Djangoのアプリに新しいユーザーを作成/追加したいと思います。djangoが提供するデフォルトのログインを使用しています。デフォルトのログインにユーザーを追加しようとしています。https://docs.djangoproject.com/en/dev/topics/auth/の例:

>>> from django.contrib.auth.models import User
>>> user = User.objects.create_user('john', 'lennon@thebeatles.com', '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') 
4

2 に答える 2

28

最初に行う必要があるのは、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リクエストの場合、POST値からユーザーフォームを作成します。次に、それが有効なフォームであるかどうかを確認します。そうである場合はユーザーを作成し、そうでない場合はエラーのあるフォームを返します。POSTリクエストでない場合は、クリーンなフォームを送信します

レンプレート

<form method="post" action="">
    {% csrf_token %}
    {{ form }}
    <input type="submit" value="Create new user account" />
</form>
于 2012-07-02T04:29:17.530 に答える
0

フォームを使用します。ここでのエアコーディング:

class SignupForm(forms.Form):
    username = forms.CharField()
    email = forms.EmailField()
    password = forms.CharField(widget=forms.PasswordInput)
于 2012-07-02T03:57:26.377 に答える