我想用django创建一个注册系统。 我创建了一个用户,该用户的类位于forms.py上,并扩展了UserCreationForm。 并且我运行服务器并填写表单并创建了用户,但是我无法在django的登录页面上用该用户登录,并且它说我该用户不是工作人员用户 如何使我的用户人员???
forms.py:
class ModelNameForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = (
'username' ,
'first_name' ,
'last_name' ,
'email' ,
'password1' ,
'password2'
)
def save(self, commit=True):
user = super (ModelNameForm , self ).save(commit=False)
user.first_name = self.cleaned_data ['first_name']
user.last_name = self.cleaned_data ['last_name']
user.email = self.cleaned_data ['email']
if commit :
user.save()
return user
views.py:
def register (request):
form = ModelNameForm (request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/thanks')
else:
form = ModelNameForm()
args = {'form' : form }
return render(request , 'signup.html' , args)
答案 0 :(得分:1)
您可以通过添加
user.is_staff = True
在模型表单保存方法中
答案 1 :(得分:0)
您可以在ModelForm user.is_staff = True
方法中添加save
。但这不是安全,因为所有新用户都将成为staff
用户,并且他们将有权访问您的管理页面。
更安全的方法是创建superuser
并在您的管理员中手动授予其他用户访问权限。您可以通过以下方式创建超级用户:
python manage.py createsuperuser
然后,您可以使用超级用户凭据登录到django管理页面。如果需要授予用户权限,您必须使用超级用户帐户打开管理页面,然后单击Users
并找到用户。打开此用户,然后单击复选框is staff
。
答案 2 :(得分:0)
我在单独的表单中添加了 user.is_staff = True
以创建员工用户,并使用另一个表单创建普通用户。这样我就可以防止所有新用户成为员工用户。
我正在使用自定义用户模型。 以下是创建员工用户的代码:
forms.py
class StaffCreationForm(forms.ModelForm):
"""
A Custom form for creating new staffs.
"""
class Meta:
model = get_user_model()
fields = ['name','phone']
views.py
def register_staff(request):
if request.user.is_superuser: # giving access to superuser only.
form = StaffCreationForm()
if request.method == 'POST':
form = StaffCreationForm(request.POST)
if form.is_valid():
phone = form.cleaned_data.get('phone') # obtaining data from fields.
name = form.cleaned_data.get('name')
user = User.objects.create_user(phone = phone, name = name) # assigning obtained data to model variables and save user as staff.
user.is_staff=True
user.save()
message = ('%(name)s is added as a staff.') % {'name': name} # flash message for successful registration.
messages.success(request, message)
return redirect('staff')
context = {'form':form}
return render(request, 'registration/add_staff.html', context)
else:
return render(request, 'error-404.html')
urls.py
urlpatterns = [
path('add_staff', register_staff, name = 'staff'),
]
add_staff.html
<form method="POST">
{% csrf_token %}
{% for message in messages %}
{% if message.tags %}
<div class="alert alert-{{message.tags}}">
{{message}}
</div>
{% endif %}
{% endfor %}
{{ form|crispy }}
<input type="submit" class="btn btn-primary" value="Add Staff">
</form>