Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django ';用户';对象没有属性';后端';_Django_Forms - Fatal编程技术网

Django ';用户';对象没有属性';后端';

Django ';用户';对象没有属性';后端';,django,forms,Django,Forms,编辑:如果您想跳过背景故事,只需检查错误消息和代码转储,所有内容都在底部:) 我已经尝试实施了半天的用户注册表,我觉得我已经很接近了,但还没有完全实现 因此,我首先实现了Django的内置UserCreationForm。根据我的观点,我设计了这段代码,灵感来源于对以下内容的回应: 从django.contrib.auth.forms导入UserCreationForm 从django.contrib.auth导入登录 def创建用户(请求): 如果request.method==“POST”

编辑:如果您想跳过背景故事,只需检查错误消息和代码转储,所有内容都在底部:)


我已经尝试实施了半天的用户注册表,我觉得我已经很接近了,但还没有完全实现

因此,我首先实现了Django的内置
UserCreationForm
。根据我的观点,我设计了这段代码,灵感来源于对以下内容的回应:

从django.contrib.auth.forms导入UserCreationForm
从django.contrib.auth导入登录
def创建用户(请求):
如果request.method==“POST”:
form=UserCreationForm(request.POST)
如果form.is_有效():
new_user=user.objects.create_user(**form.cleaned_data)
登录(新用户)
返回重定向(“post_列表”)
其他:
form=UserCreationForm()
返回呈现(请求'blog/create_user.html',{'form':form})
问题是:我希望用户也能够存储他们的电子邮件。因此,我决定使用其中的一段代码来扩展
forms.py
文件中的
UserCreationForm()

来自django导入表单的

从django.contrib.auth.models导入用户
从django.contrib.auth.forms导入UserCreationForm
类UserCreateForm(UserCreationForm):
email=forms.EmailField(必需=True)
类元:
模型=用户
字段=(“用户名”、“电子邮件”、“密码1”、“密码2”)
def save(self,commit=True):
user=super(UserCreateForm,self).save(commit=False)
user.email=self.cleanned_数据[“email”]
如果提交:
user.save()
返回用户
当我检查实际的网页时,它仍然拒绝包含电子邮件部分(即使在我关闭后:
从django.contrib.auth.forms导入UserCreationForm
从.forms导入UserCreationForm
)。最后,我在
views.py
forms.py
文件中将forms.py文件中的名称切换为UserForm。因此,在
forms.py
文件中,它现在说:

类用户表单(UserCreationForm):
解决方案的灵感来源于此

所以现在它说,
“password1”是这个函数的无效关键字参数
,我想“当然,我正在将一本字典从我的表单传递到create_user,现在我已经篡改了
UserCreationForm
它的运行不再那么顺利了:create_user想要用户名、电子邮件和密码,对吗?但现在我正在发送用户名、电子邮件、密码1和密码2

因此,我在
views.py
中的代码中添加了以下内容:

如果form.is_有效():
用户名=表单。已清理的\u数据[“用户名”]
电子邮件=表单。已清理的数据[“电子邮件”]
password=表单。已清除的\u数据[“password1”]
新建用户=用户。对象。创建用户(用户名、电子邮件、密码)
登录(新用户)
现在我在/create_user/:login()上得到了
TypeError,它正好有两个参数(1个给定)
,而真正让我头疼的是,在我篡改
UserCreationForm
之前,这不是一个问题。但是,好吧,好吧,我会用谷歌搜索它,阅读文档和一些示例,看起来大多数人使用
login(request,user)
调用登录函数,所以我再次将代码更改为:

new_user=user.objects.create_user(用户名、电子邮件、密码)
登录(请求,新用户)
在这里,我终于陷入了僵局:

'User' object has no attribute 'backend'
我用谷歌搜索它,要么我找不到任何与我的处境相关的东西,要么我迟钝地去看它。如果有人能解释出问题所在,我将不胜感激

当前代码的代码转储:
为了可读性,省略了其他视图和不相关的导入

views.py

从django.exe导入渲染
from.forms导入用户表单
从django.shortcuts导入重定向
从django.contrib.auth.models导入用户
从django.contrib.auth导入登录
def创建用户(请求):
如果request.method==“POST”:
form=UserForm(request.POST)
如果form.is_有效():
用户名=表单。已清理的\u数据[“用户名”]
电子邮件=表单。已清理的数据[“电子邮件”]
password=表单。已清除的\u数据[“password1”]
新建用户=用户。对象。创建用户(用户名、电子邮件、密码)
登录(新用户)
返回重定向(“post_列表”)
其他:
form=UserForm()
返回呈现(请求'blog/create_user.html',{'form':form})
forms.py

来自django导入表单的

从django.contrib.auth.models导入用户
从django.contrib.auth.forms导入UserCreationForm
类UserForm(UserCreationForm):
email=forms.EmailField(必需=True)
类元:
模型=用户
字段=(“用户名”、“电子邮件”、“密码1”、“密码2”)
def save(self,commit=True):
user=super(UserForm,self).save(commit=False)
user.email=self.cleanned_数据[“email”]
如果提交:
user.save()
返回用户
来自:

首先调用authenticate()

手动登录用户时,必须成功 在调用login()之前,使用authenticate()对用户进行身份验证。 authenticate()为用户设置一个属性,指出 身份验证后端已成功对该用户进行身份验证(请参阅 后端文档(了解详细信息),并且需要此信息 稍后在登录过程中。如果您尝试执行此操作,将引发错误 登录直接从数据库检索的用户对象

因此,为了登录用户,您必须首先调用
authenticate()
并检查是否返回了用户:

new_user = User.objects.create_user(username, email, password)
new_user = authenticate(username=username, password=password)
if new_user:
    login(request, new_user)
从:

首先调用authenticate()

手动登录用户时,必须成功 使用authenticat对用户进行身份验证
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)
            new_user = authenticate(**form.cleaned_data)
            login(request, new_user)
            return redirect('post_list')
    else:
        form = UserCreationForm()

    return render(request, 'blog/create_user.html', {'form': form})