[英]Is there any way to make a second LOGIN_REDIRECT_URL in settings.py in Django?
我正在 Django 中创建一个应用程序,它有两个外部用户:1. 老师 2. 学生
我必须总共创建 3 个应用程序,一个是包含home.html
模板的基础应用程序,另一个是包含student.html
模板的学生应用程序,第三个包含teacher.html
模板的教师应用程序。
我现在刚刚创建了两个应用程序,基本应用程序和学生应用程序,我为学生应用程序创建了登录、注销和注册页面,现在我能够成功地将用户(学生)重定向到 student.html 每当学生登录时系统和我通过将LOGIN_REDIRECT_URL = 'student'
放在我的settings.py
做到这一点。
我也想对教师应用程序做同样的事情,但我想将教师重定向到teacher.html
。
有什么方法可以在settings.py
创建第二个LOGIN_REDIRECT_URL
来实现这个目的,还是可以通过其他方式完成?
我的项目结构
django_project
|__esacp(主系统)
|_____迁移
|_____模板
|____esacp
|______base.html
|__________home.html
|_________学生.html
|__________老师.html
|_____apps.py
|_____forms.py
|_____models.py
|_____views.py
|__django_project
|__学生
|_____迁移
|_____模板
|________学生
|_______登录.html
|__________logout.html
|_______注册.html
|_____apps.py
|_____forms.py
|_____models.py
|_____views.py
|__老师
|__db.sqlite3
|__manage.py
esacp app的models.py
代码
from django.db import models
from django.utils import timezone
class StudentType(models.Model):
studenttype_id = models.IntegerField(primary_key=True)
type_title = models.CharField(max_length=50)
def __str__(self):
return self.type_title
class StudentDetails(models.Model):
name = models.CharField(max_length=50)
username = models.CharField(max_length=50, primary_key=True)
password = models.CharField(max_length=50)
email_id = models.CharField(max_length=100)
contact = models.CharField(max_length=100)
studenttype = models.ForeignKey(StudentType, on_delete=models.CASCADE)
registration_date = models.DateTimeField(default=timezone.now)
modify_date = models.DateTimeField(auto_now=True)
def __str__(self):
return self.name
esacp app的urls.py
代码
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='esacp-home'),
path('student', views.student, name='student'),
]
主工程的urls.py
代码
from django.contrib import admin
from django.contrib.auth import views as auth_views
from django.urls import path, include
from users import views as user_views
urlpatterns = [
path('admin/', admin.site.urls),
path('register/', user_views.register, name='register'),
path('login/', auth_views.LoginView.as_view(template_name='users/login.html'), name='login'),
path('logout/', auth_views.LogoutView.as_view(template_name='users/logout.html'), name='logout'),
path('tlogin/', auth_views.LoginView.as_view(template_name='teacher/tlogin.html'), name='tlogin'),
path('tlogout/', auth_views.LogoutView.as_view(template_name='teacher/tlogout.html'), name='tlogout'),
path('esacp/', include('esacp.urls')),
教师应用的views.py
代码
from django.shortcuts import render
from django.contrib.auth.views import LoginView
class MyLoginView():
def get_success_url(self):
url = self.get_redirect_url()
return url
esacp app的views.py
代码
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
def home(request):
return render(request, 'esacp/home.html')
@login_required
def student(request):
return render(request, 'esacp/student.html')
下面我在setting.py
有声明
LOGIN_REDIRECT_URL = 'student'
您有两个登录 URL。 因此,您可以为每个视图使用不同的登录视图,并覆盖get_success_url
以便您在登录后重定向到正确的页面。
例如,教师登录视图如下所示:
from django.contrib.auth.views import LoginView
class TeacherLoginView(LoginView):
template_name = 'teacher/tlogin.html'
def get_success_url(self):
url = self.get_redirect_url()
return url or '/teacher/' # FIXME use reverse here instead of hardcoding the URL
然后在您的 URL 模式中使用该视图而不是TeacherView
。
path('login/', TeacherLoginView.as_view(), name='login'),
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.