有什么办法可以在 Django 的 settings.py 中创建第二个 LOGIN_REDIRECT_URL 吗?

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(主系统)

|_____migrations

|_____templates

|________esacp

|__________base.html

|__________home.html

|__________student.html

|__________teacher.html

|_____apps.py

|_____forms.py

|_____models.py

|_____views.py

|__django_project

|__student

|_____migrations

|_____templates

|________student

|___________login.html

|___________logout.html

|___________register.html

|_____apps.py

|_____forms.py

|_____models.py

|_____views.py

|__teacher

|__db.sqlite3

|__manage.py

esacp appmodels.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 appurls.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')),

老师appviews.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 appviews.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'),