我在Django中创建了一个自定义用户模型,一切都很顺利,但是当我尝试创建一个新用户时,它给了我一个错误
这是我的档案:
首先我的 models.py 我在哪里创建了用户表
class UserModelManager(BaseUserManager):
def create_user(self, email, password, pseudo):
user = self.model()
user.name = name
user.email = self.normalize_email(email=email)
user.set_password(password)
user.save()
return user
def create_superuser(self, email, password):
'''
Used for: python manage.py createsuperuser
'''
user = self.model()
user.name = 'admin-yeah'
user.email = self.normalize_email(email=email)
user.set_password(password)
user.is_staff = True
user.is_superuser = True
user.save()
return user
class UserModel(AbstractBaseUser, PermissionsMixin):
## Personnal fields.
email = models.EmailField(max_length=254, unique=True)
name = models.CharField(max_length=16)
## [...]
## Django manage fields.
date_joined = models.DateTimeField(auto_now_add=True)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
REQUIRED_FIELD = ['email', 'name']
objects = UserModelManager()
def __str__(self):
return self.email
def get_short_name(self):
return self.name[:2].upper()
def get_full_name(self):
return self.name
这里是我创建注册表单的 forms.py :
class SignUpForm(UserCreationForm):
email = forms.CharField(required=True, help_text='البريد الإلكترونى الخاص بك - يجب ان يكون حقيقى (يستخدم لتسجيل الدخول) ')
name = forms.CharField(required=True, help_text='إسمك الحقيقى - سيظهر كأسم البائع')
password1 = forms.CharField(widget=forms.PasswordInput,
help_text='كلمة المرور - حاول ان تكون سهلة التذكر بالنسبة لك')
password2 = forms.CharField(widget=forms.PasswordInput,
help_text='تأكيد كلمة المرور - إكتب نفس كلمة المرور السابقة مرة أخرى')
class Meta:
model = UserModel
fields = ('email','name', 'password1', 'password2', )
labels = {
'name': 'إسمك الحقيقى - سيظهر كأسم البائع',
'email': 'البربد الإلكترونى Email',
'password1': 'كلمة المرور',
'password2': 'تأكيد كلمة المرور'
}
然后是查看注册模板的 Views.py :
def signup(request):
if request.method == 'POST':
signup_form = SignUpForm(request.POST)
if signup_form.is_valid():
signup_form.save()
username = signup_form.cleaned_data.get('username')
raw_password = signup_form.cleaned_data.get('password1')
user = authenticate(username=username, password=raw_password)
login(request, user)
return redirect('signup_confirm')
else:
signup_form = SignUpForm()
context = {
'signup_form': signup_form,
}
return render(request, 'fostania_web_app/signup.html', context)
最后,模板本身在哪里使用 signup.html
{% extends 'fostania_web_app/base.html' %}
{% block content %}
{% load static %}
<br>
<br>
<div align="center">
<div class="card border-primary mb-3" style="max-width: 40rem;" align="center">
<div class="card-header">إنشاء حساب جديد</div>
<div class="card-body text-dark">
<h5 class="card-title">
<img src="{% static 'img/add_user_big.png' %}">
</h5>
<p class="card-text"> {% if user.is_authenticated %}
<div align="center">
لقم قمت بتسجيل الدخول بالفعل <br>
يمكنك <a href = '{% url 'logout' %}'>
<button class="btn btn-danger" >تسجيل الخروج</button> </a> إذا كنت ترغب الدخول على حساب اخر
</div>
{% else %}
<form method="post" align="right">
{% csrf_token %}
{% for field in signup_form %}
<p>
{{ field.label_tag }}<br>
{{ field }}<br>
<font color="gray">{{ field.help_text }}</font>
{% for error in field.errors %}
<p style="color: red">{{ error }}</p>
{% endfor %}
{% endfor %}
<br>
<button type="submit" class="btn btn-success">تسجيــل</button><br>
بالضغط على تسجيل انت توافق على شروط الإستخدام الخاصة بموقعنا !
</form>
</div>
{% endif %}
</p>
</div>
</div>
{% endblock %}
这就是错误的样子:
ImproperlyConfigured at /signup/
TemplateResponseMixin requires either a definition of 'template_name' or an implementation of 'get_template_names()'
答案 0 :(得分:1)
我怀疑问题实际上出在您的 urls.py 中。如果您将 url 指向错误的视图(可能是您已关联到 /signup/ 路径的 CBV),则可能会导致此错误。