django中的User类应该怎么用

发布于 2022-09-01 06:49:49 字数 1175 浏览 19 评论 0

我最近在看一个Django的教程,里面有一章提到用户登录。那个教程写的方法是查询数据库中的username字段对应的password,和输入的password比较是否是相同的。我觉着这个方法不太好,就去官方文档看了一下有一个自带用户登录的User类。
我就改了一下模型

class UserProfile(models.Model):
    Userinfo = models.OneToOneField(User)
    join_time = models.DateTimeField()

然后改了一下视图。

def Userlogin(request):
    uf = UserForm(request.POST)
    if request.method == "POST":
        if uf.is_valid():
            uf = UserForm(request.POST)
            username = uf.cleaned_data['username']
            password = uf.cleaned_data['password']
            user = models.UserProfile.authenticate(username=username,password=password)
            if user is not None:
                if user.is_active:
                    login(request, user)
                    return render(request,'UserLogin/index.html',{'username':username})
            else:
                return HttpResponse('password is not matched')
    return render(request, 'UserLogin/login.html',{'uf':uf})

但是这样在登录的时候会显示

'UserForm' object has no attribute 'cleaned_data'

是不是我用法有问题。。希望各位高手赐教。。谢谢。。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

苦行僧 2022-09-08 06:49:49

uf = UserForm(request.POST)移动到if request.method == 'POST'内。再将is_valid()那个'uf=UserForm(request.POST)删除掉。

我在写这类方法的时候,会写成这样的结构:

def Userlogin(request):

    if request.method == "POST":
        uf = UserForm(request.POST)
        if uf.is_valid():
            ...
    else:
        uf = UserForm()

    return render(request, 'UserLogin/login.html',{'uf':uf})
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文