Django 1.11登录后动态重定向至带数据库参数页面的实现问询
解决方案
你说得对,在urls.py里确实没法直接访问数据库获取用户的team字段,所以靠简单配置next参数实现不了这个动态重定向。咱们可以通过自定义登录视图来搞定,步骤如下:
1. 编写自定义登录视图
在你的app的views.py里添加下面的代码,替换原来直接用auth_views.login的逻辑:
from django.contrib.auth import authenticate, login from django.shortcuts import render, redirect from .forms import loginPlaceHolderForm # 确保导入你的自定义表单 from django.contrib.auth.models import User # 如果用自定义用户模型就替换成你的模型 def custom_login(request): if request.method == 'POST': form = loginPlaceHolderForm(request.POST) if form.is_valid(): # 验证用户身份 username = form.cleaned_data.get('username') password = form.cleaned_data.get('password') user = authenticate(request, username=username, password=password) if user is not None: login(request, user) # 获取用户的team字段值 team = user.team # 这里假设你的用户模型有team字段,自定义模型请调整路径 # 重定向到带team参数的目标页面 return redirect(f'/colors?team={team}') else: # 验证失败,返回表单并提示错误 form.add_error(None, '用户名或密码错误') else: # GET请求,显示登录表单 form = loginPlaceHolderForm() return render(request, 'registration/login.html', {'form': form})
注意:如果你的项目用了自定义用户模型,记得把
from django.contrib.auth.models import User换成你自己的用户模型导入路径,比如from .models import CustomUser,同时确保user.team的字段名和你数据库里的一致。
2. 更新urls.py配置
把原来的登录URL配置替换成自定义视图:
from django.conf.urls import url from .views import custom_login # 导入刚才写的自定义视图 urlpatterns = [ # 替换原来的auth_views.login配置 url(r'^$', custom_login, name='login'), # 其他URL配置... ]
3. 处理边界情况(可选)
如果存在用户未设置team字段的情况,你可以加个默认重定向逻辑,避免报错:
# 在获取team之后添加 if not team: return redirect('/default-page') # 替换成你的默认页面路径
这样用户登录验证通过后,就会自动跳转到带有自己team参数的/colors页面啦!
内容的提问来源于stack exchange,提问作者Talha Ahmed
相关产品推荐
相关产品推荐

