DÜZENLEME: arka plan hikaye atlayıp sadece hata mesajını ve kodunu kontrol etmek isterseniz tüm alt :) Ben'Kullanıcı' nesne hiçbir özellik 'arka uç' vardır
de var dökümü ve yarım günlüğüne bir kullanıcı kayıt formu uygulamaya çalışıyorum ve hala çok yakınım ama henüz o kadar yakın olmadığımı hissediyorum.
Django'yu UserCreationForm
'da yerleşik olarak uygulamaya başladım. Ve benim görünümü için ben bu question yanıt esinlenerek bu kod parçası cunstructed:
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import login
def create_user(request):
if request.method == "POST":
form = UserCreationForm(request.POST)
if form.is_valid():
new_user = User.objects.create_user(**form.cleaned_data)
login(new_user)
return redirect('post_list')
else:
form = UserCreationForm()
return render(request, 'blog/create_user.html', {'form': form})
Sorun oldu: Kullanıcıların yanı kendi e-posta saklamak mümkün istedi. Bu yüzden forms.py
dosyada UserCreationForm()
uzatmak için bu blog gelen kod parçası kullanmaya karar:
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class UserCreateForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ("username", "email", "password1", "password2")
def save(self, commit=True):
user = super(UserCreateForm, self).save(commit=False)
user.email = self.cleaned_data["email"]
if commit:
user.save()
return user
Ben gerçek bir web-sayfası işaretlendiğinde Hala e-posta kısmını dahil etmeme kararı (hatta ben anahtarlamalı sonra dışarı: from django.contrib.auth.forms import UserCreationForm
ila from .forms import UserCreationForm
). Son olarak, her iki views.py
ve forms.py
dosyalarında form. Yani forms.py
dosyada şimdi ki: Bu question esinlenerek
class UserForm(UserCreationForm):
Çözüm.
Yani şimdi 'password1' is an invalid keyword argument for this function
dedi, "Tabii ki, formumdan bir sözlüğü create_user'a geçiriyorum ve şimdi UserCreationForm
ile kurcalamıyorum artık sorunsuz şekilde çalışmıyor: create_user ?. bir kullanıcı adı, e-posta ve şifre doğru Ama şimdi adınızı, e-posta, password1 ve password2 yolluyorum Yani
ben views.py
kodda aşağıdaki eklendi: Şimdi
if form.is_valid():
username = form.cleaned_data["username"]
email = form.cleaned_data["email"]
password = form.cleaned_data["password1"]
new_user = User.objects.create_user(username, email, password)
login(new_user)
Ben TypeError at /create_user/: login() takes exactly 2 arguments (1 given)
almak ve viteslerimi gerçekten öğüten şey, bunun kurcalamadan önce nasıl bir sorun olmadığını UserCreationForm
(hatırlamamın en iyisine). çoğu insan için yine bu yüzden benim kodunu değiştirmek login(request, user)
ile giriş-işlevi çağırmak gibi Ama, tamam, ben, dokümantasyon ve bazı örneklerle okumak, onu google edeceğiz İyi görünüyor: Burada
new_user = User.objects.create_user(username, email, password)
login(request, new_user)
Ve ben m nihayet çıkmazda ben olsun:
'User' object has no attribute 'backend'
bunu google ve ya benim durum ile ilişkilidir şey bulamazsanız ya da ben öyle görmek witted yavaş değilim. Orada yanlış olanı açıklayabilecek biri varsa, bunu çok takdir ederim. Geçerli kod
Kod dökümü:
atlanmış diğer görünümleri ve okunabilirlik
views.py
from django.shortcuts import render
from .forms import UserForm
from django.shortcuts import redirect
from django.contrib.auth.models import User
from django.contrib.auth import login
def create_user(request):
if request.method == "POST":
form = UserForm(request.POST)
if form.is_valid():
username = form.cleaned_data["username"]
email = form.cleaned_data["email"]
password = form.cleaned_data["password1"]
new_user = User.objects.create_user(username, email, password)
login(new_user)
return redirect('post_list')
else:
form = UserForm()
return render(request, 'blog/create_user.html', {'form': form})
formlar.docs itibaren py
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class UserForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ("username", "email", "password1", "password2")
def save(self, commit=True):
user = super(UserForm, self).save(commit=False)
user.email = self.cleaned_data["email"]
if commit:
user.save()
return user