有什么办法可以在 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'),
我正在 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'),