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
相关产品推荐
相关产品推荐

