基于字段django的重定向特定视图

发布于 2025-02-02 12:24:06 字数 1843 浏览 1 评论 0原文

我需要根据profesor字段登录后重定向到特定视图,如果这是错误的,则重定向到Vistaalumno,如果是真的,请重定向到vistaprofesor 。

views.py

def profesor(user):
    return (user.profesor)

@login_required
@user_passes_test(profesor)
def vistaProfesor(request):
    rut= request.user.rut_user
    notas = Nota.objects.select_related('id_asignatura','rut_alumno').filter(rut_profesor=rut)
    observaciones = Observacion.objects.filter(rut_profesor=rut)    
    return render(request, 'core/vistaProfesor.html', {'notas': notas,  'observaciones': observaciones})
        


@login_required
def vistaAlumno(request):
    if request.user.profesor == False:
        rut= request.user.rut_user         
        notas = Nota.objects.select_related('id_asignatura').select_related('rut_profesor').filter(rut_alumno=rut)
        asistencias = Asistencia.objects.filter(rut_alumno=rut)
        #Necesito unir la tabla observacion con profesor, lo cual ya hace, pero luego quiero unir la tabla profesor con asignatura y mostrar el nombre en el vistaAlumno.html
        observaciones = Observacion.objects.select_related('rut_profesor').filter(rut_alumno=rut)          
        curso = Alumno.objects.filter(rut_alumno=rut).values_list('id_curso')
        horarios = Horario.objects.select_related('rut_profesor','id_asignatura','id_sala').filter(id_curso__in=curso)   
        return render(request, 'core/vistaAlumno.html', {'notas': notas, 'asistencias': asistencias, 'observaciones': observaciones, 'horarios': horarios})
    else:
        vistaProfesor(request)

models.py

class User(AbstractUser):  
    profesor = models.BooleanField(default=False)
    rut_user = models.IntegerField(null=True) 

settings.py

LOGIN_REDIRECT_URL = '/vistaAlumno'

I need to redirect after login to a specific view according to the Profesor field, if this is False, redirect to vistaAlumno, if True, redirect to vistaProfesor.

views.py

def profesor(user):
    return (user.profesor)

@login_required
@user_passes_test(profesor)
def vistaProfesor(request):
    rut= request.user.rut_user
    notas = Nota.objects.select_related('id_asignatura','rut_alumno').filter(rut_profesor=rut)
    observaciones = Observacion.objects.filter(rut_profesor=rut)    
    return render(request, 'core/vistaProfesor.html', {'notas': notas,  'observaciones': observaciones})
        


@login_required
def vistaAlumno(request):
    if request.user.profesor == False:
        rut= request.user.rut_user         
        notas = Nota.objects.select_related('id_asignatura').select_related('rut_profesor').filter(rut_alumno=rut)
        asistencias = Asistencia.objects.filter(rut_alumno=rut)
        #Necesito unir la tabla observacion con profesor, lo cual ya hace, pero luego quiero unir la tabla profesor con asignatura y mostrar el nombre en el vistaAlumno.html
        observaciones = Observacion.objects.select_related('rut_profesor').filter(rut_alumno=rut)          
        curso = Alumno.objects.filter(rut_alumno=rut).values_list('id_curso')
        horarios = Horario.objects.select_related('rut_profesor','id_asignatura','id_sala').filter(id_curso__in=curso)   
        return render(request, 'core/vistaAlumno.html', {'notas': notas, 'asistencias': asistencias, 'observaciones': observaciones, 'horarios': horarios})
    else:
        vistaProfesor(request)

models.py

class User(AbstractUser):  
    profesor = models.BooleanField(default=False)
    rut_user = models.IntegerField(null=True) 

settings.py

LOGIN_REDIRECT_URL = '/vistaAlumno'

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无敌元气妹 2025-02-09 12:24:06

我将说明Django的身份验证框架用于登录网站。我希望您能够使用它来解决您的问题。

假设我们已经从我们的forms.py文件中收集了用户的用户名和密码:

from django import forms

class LoginForm(forms.form):
    username = forms.CharField()
    password = forms.CharField(widget=forms.PasswordInput)

nb:nb:此表单将对数据库进行身份验证用户。 passwordInput呈现密码 html元素。

编辑views.py

from django.http import HttpResponse
from django.shortcuts import render
from django.contrib.auth import authenticate, login
from .forms import LoginForm

def user_login(request):
    if request.method == 'POST':
        if form.is_valid():
            cd = form.cleaned_data
            user = authenticate(request, username=cd['username'], password=cd['password'])
        
            if user is not None:
                if user.is_active:
                    login(request, user)    
                    return HttpResponse('Authenticated') 
                    #or
                    # return render(request, 'some_other_page.html', {'form': form})
                else:
                    return HtppResponse('Disabled account')
            else:
                return HttpResponse('Invalid login')
        else:
            form = LoginForm()
            return render(request, 'account/login.html', {'form': form})

在应用程序'urls.py中,

from django.urls import path
from . import views

urlpatterns = [
    #post views
    path('login/', views.user_login, 'login'),
]

我们应该在主项目目录中更新urls.py file 文件称为testProject

from django.urls import path, include
from django.contrib import admin

urlpatterns = [
    path('admin/', admin.site.urls),
    path('account/', include('account.urls')),
]

App App Directory:

templates/
    account/
        login.html
    base.html

编辑base.html模板:

{% load static %}
<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}Put title here{% endblock %}</title>
    <link href="{% static "css/base.css" %}" rel="stylesheet">
</head>
<body>
    <div id="header">
        <span class="logo">Test Project</span>
    </div>
    <div id="content">
        {% block content %}{% endblock %}
    </div>
</body>
</html>

account/login.html中:

{% extends "base.html" %}
{% block title %}Log-in{% endblock %}
{% block content %}
    <h1>Log-in</h1>
    <p>Please, use the following form to log-in:</p>
    <form method="post">
        {{ form.as_p }}
        {% csrf_token %}
        <p><input type="submit" value="Log in"></p>
    </form>
{% endblock %}

I'm going to illustrate Django's authentication framework used to log in to a website. From here I hope you will be able to use this to solve your issue.

Assuming that we have already collected users' usernames and passwords from our forms.py file in the app application directory:

from django import forms

class LoginForm(forms.form):
    username = forms.CharField()
    password = forms.CharField(widget=forms.PasswordInput)

N.B: This form will authenticate users against the database. The PasswordInput renders the password HTML element.

Edit the views.py:

from django.http import HttpResponse
from django.shortcuts import render
from django.contrib.auth import authenticate, login
from .forms import LoginForm

def user_login(request):
    if request.method == 'POST':
        if form.is_valid():
            cd = form.cleaned_data
            user = authenticate(request, username=cd['username'], password=cd['password'])
        
            if user is not None:
                if user.is_active:
                    login(request, user)    
                    return HttpResponse('Authenticated') 
                    #or
                    # return render(request, 'some_other_page.html', {'form': form})
                else:
                    return HtppResponse('Disabled account')
            else:
                return HttpResponse('Invalid login')
        else:
            form = LoginForm()
            return render(request, 'account/login.html', {'form': form})

In the apps' urls.py

from django.urls import path
from . import views

urlpatterns = [
    #post views
    path('login/', views.user_login, 'login'),
]

We should update the urls.py file in the main project directory assumming our project's called testproject.

from django.urls import path, include
from django.contrib import admin

urlpatterns = [
    path('admin/', admin.site.urls),
    path('account/', include('account.urls')),
]

The app app directory:

templates/
    account/
        login.html
    base.html

Edit the base.html template:

{% load static %}
<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}Put title here{% endblock %}</title>
    <link href="{% static "css/base.css" %}" rel="stylesheet">
</head>
<body>
    <div id="header">
        <span class="logo">Test Project</span>
    </div>
    <div id="content">
        {% block content %}{% endblock %}
    </div>
</body>
</html>

In the account/login.html:

{% extends "base.html" %}
{% block title %}Log-in{% endblock %}
{% block content %}
    <h1>Log-in</h1>
    <p>Please, use the following form to log-in:</p>
    <form method="post">
        {{ form.as_p }}
        {% csrf_token %}
        <p><input type="submit" value="Log in"></p>
    </form>
{% endblock %}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文