You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中从自定义表studentlogin校验邮箱密码及代码放置位置咨询

Django自定义学生表登录校验实现指引

以下是你找到的代码的具体放置位置,以及缺失的核心校验逻辑补充:

1. settings.py 配置修改

找到项目根目录下的settings.py文件,搜索TEMPLATES配置块,在OPTIONS下的context_processors列表中添加django.template.context_processors.request(注意你找到的旧版本路径适配Django1.10+需要修正为该路径),修改后配置示例:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request', # 新增该行
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

该配置的作用是让所有模板可以直接调用request对象,支撑后续模板层的登录状态判断逻辑。

2. 视图层代码放置与逻辑补全

你的猜测正确,视图代码放在对应app的views.py文件中。你找到的示例缺失了核心的studentlogin表数据校验逻辑,完整代码如下:

from django.shortcuts import render, redirect
from .models import studentlogin # 导入你自定义的学生数据表模型
from django.contrib.auth.hashers import make_password, check_password # 用于加密校验密码,可选但推荐使用

def loginView(request):
    # 处理前端提交的POST登录请求
    if request.method == "POST":
        # 接收前端提交的邮箱、密码参数
        input_email = request.POST.get("email")
        input_pwd = request.POST.get("password")
        # 查询studentlogin表是否存在对应邮箱的用户
        try:
            target_stu = studentlogin.objects.get(email=input_email)
        except studentlogin.DoesNotExist:
            return render(request, "login.html", {"err_msg": "该邮箱未注册"})
        # 密码校验(如果使用加密存储密码就用注释的校验逻辑,明文存储用当前逻辑)
        if target_stu.password == input_pwd:
        # if check_password(input_pwd, target_stu.password):
            # 校验通过写入session
            request.session["isLoggedIn"] = True
            request.session["username"] = target_stu.stu_name # 可根据表字段替换为你要存的用户标识
            # 登录成功跳转到首页/学生个人页
            return redirect("/index/")
        else:
            return render(request, "login.html", {"err_msg": "密码错误"})
    # GET请求直接返回登录页
    return render(request, "login.html")

写完视图后需要在对应app的urls.py中添加路由映射,让登录请求可以走到该视图:

from django.urls import path
from . import views

urlpatterns = [
    path("login/", views.loginView, name="login"), # 新增该行配置登录路由
]

3. 模板层代码放置

你找到的模板代码可以放在任意需要判断登录状态的模板文件中(比如首页、公共导航栏模板等),注意你找到的代码存在语法错误,Django多分支判断的关键字是{% elif %}不是{% else if %},修正后代码:

{% if request.session.isLoggedIn %}
    <span>欢迎,{{request.session.username}}</span>
    <a href="/logout">退出登录</a>
{% else %}
    <p>用户未登录或已退出</p>
    <a href="/login">前往登录</a>
{% endif %}

如果需要在登录页显示错误提示,在login.html的对应位置添加以下代码即可:

{% if err_msg %}
<p style="color: red">{{err_msg}}</p>
{% endif %}

注意:密码不建议明文存储在studentlogin表中,注册写入数据时用make_password(明文密码)加密后存储,登录时用上方注释的check_password逻辑校验,安全性更高。


内容的提问来源于stack exchange,提问作者Dcoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 20:36:03