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

登录后未跳转至仪表盘,仍停留在登录页的问题排查

登录后无法跳转至仪表盘问题排查

问题现象

实现医生登录视图后,用户提交登录信息,页面仅刷新并回到清空字段的登录页,未跳转至仪表盘。已确认URL路径和表单POST方法设置无误。

代码片段

views.py

def doctor_login_view(request):
    if request.method == 'POST':
        form = DoctorLoginForm(request.POST)
        if form.is_valid():
            email = form.cleaned_data.get('email')
            password = form.cleaned_data.get('password')
            user = authenticate(request, email=email, password=password)
            print(user)
            if user is not None:
                login(request, user)
                return redirect('doctor_dashboard')  # Redirect to the doctors' dashboard
            else:
                form.add_error(None, 'Invalid email or password.')

    else:
        form = DoctorLoginForm()

    return render(request, 'doctor_login.html', {'form': form})

forms.py

class DoctorLoginForm(forms.Form):
    email = forms.EmailField(max_length=255)
    password = forms.CharField(widget=forms.PasswordInput)

urls.py

path('doctor/login/', views.doctor_login_view, name='doctor_login'),

登录模板(doctor_login.html)

{% extends 'base.html' %}

{% block content %}
  <div class="container">
    <h2>Doctor Login</h2>
    <form method="post" action="{% url 'doctor_login' %}">
      {% csrf_token %}
      <!-- Login form fields -->
      <div class="form-group">
        <label for="email">Email Address</label>
        <input type="email" class="form-control" id="email" name="email" required>
      </div>
      <div class="form-group">
        <label for="password">Password</label>
        <input type="password" class="form-control" id="password" name="password" required>
      </div>
      <button type="submit" class="btn btn-primary">Login</button>
    </form>
    <p class="mt-3">Don't have an account? <a href="{% url 'doctor_registration' %}" class="btn btn-link">Register</a></p>
  </div>

{% endblock %}

排查与解决步骤

  1. 检查用户认证是否成功

    • 查看终端中print(user)的输出:
      • 若输出None,说明认证失败:
        • 核对用户邮箱和密码是否匹配;
        • Django默认authenticate方法用username而非email验证,需调整认证逻辑(见下方方案)。
      • 若输出用户对象,说明认证成功但跳转失败:
        • 检查doctor_dashboard的URL配置,确保urls.py中存在name='doctor_dashboard'的路径;
        • 排查是否有权限中间件拦截已登录用户的请求。
  2. 修复邮箱认证逻辑

    • 方案一:修改自定义用户模型(需提前配置),将USERNAME_FIELD设为email:
      class User(AbstractUser):
          USERNAME_FIELD = 'email'
          REQUIRED_FIELDS = ['username']
      
    • 方案二:自定义认证后端,支持邮箱登录:
      创建backends.py文件:
      from django.contrib.auth.backends import ModelBackend
      from django.contrib.auth import get_user_model
      
      class EmailBackend(ModelBackend):
          def authenticate(self, request, email=None, password=None, **kwargs):
              UserModel = get_user_model()
              try:
                  user = UserModel.objects.get(email=email)
              except UserModel.DoesNotExist:
                  return None
              else:
                  if user.check_password(password):
                      return user
              return None
      
      在settings.py中添加配置:
      AUTHENTICATION_BACKENDS = [
          'your_app_name.backends.EmailBackend',
          'django.contrib.auth.backends.ModelBackend',
      ]
      
  3. 添加表单错误反馈
    在模板的表单标签内添加错误提示,方便排查验证失败原因:

    {% if form.non_field_errors %}
        <div class="alert alert-danger">
            {{ form.non_field_errors }}
        </div>
    {% endif %}
    
  4. 确认跳转URL名称正确性
    检查项目urls.py中是否存在对应路径,确保名称完全匹配:

    path('doctor/dashboard/', views.doctor_dashboard_view, name='doctor_dashboard'),
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 03:37:53