繁体   English   中英

有没有办法在 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(主系统)

|_____迁移

|_____模板

|____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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM