首页 > 解决方案 > 用户模型和用户身份验证(Django 和 mysql)

问题描述

我是 py web dev 的新手。我正在为我的网络应用程序使用 django 和 mysql。我的应用程序有效,但我无法维护登录会话。在主页上的每个查询后,它会将我重定向到登录页面。原因是我没有使用 django 用户身份验证系统,而是我在里面编写了自己的身份验证代码

```view.py ``` 
def login(request):
    if request.method == "POST":
        form = Studentlogin(request.POST)
        if form.is_valid():
            email = form.cleaned_data.get('email')
            password = form.cleaned_data.get('password')
            try:
                currstudent = students.objects.get(email=email, password=password)
                expense = sublist.objects.all()
                return render (request, 'subscrap/main.html', {'student': currstudent, 'sublist': expense })
    

            except:
                messages.success(request, 'Error, either Email or Password is not correct')
                pass
    else:
        form = Studentlogin()
    return render(request, 'subscrap/login.html', {'form': form}) 

登录数据只能在登录函数内部访问,我每次都必须调用它来呈现并查看更新的 main.html。我在网上搜索,我得到的线索是,这可能是因为我的用户模型(又名学生)实际上并没有像用户模型那样构建。我是 py 语法和网络开发的新手,并且对如何实现 Django 用户身份验证并将我的信息保存在 Mysql 数据库中感到困惑,因为大多数在线教程都使用 SQLite。任何帮助或线索都会对我有很大帮助。谢谢

class students(models.Model):
    fname = models.CharField(max_length=50)
    lname = models.CharField(max_length=50)
    password = models.CharField(max_length = 50 , null = True)
    passwordrepeat = models.CharField(max_length = 50, null = True)
    email = models.EmailField(max_length=150)
    class Meta:
        db_table = "students"

标签: mysqldjango

解决方案


您不应该以明文形式存储密码,只需使用 Django 的内置身份验证。Django 的 ORM 管理不同的数据库,因此您不必这样做。在大多数情况下,由于 ORM,从 SQLite 迁移到 MySQL 对应用程序没有影响。MySQL 特定文档在这里

如果您的目标是让用户/学生登录,那么只需按照此处所述扩展用户模型。然后,您的学生模型将具有您需要的所有属性,更像是is_staff,is_superuserlast_login.


推荐阅读