【问题标题】:Redirecting to particular page after authentication from views.py从views.py认证后重定向到特定页面
【发布时间】:2020-02-26 01:20:45
【问题描述】:

我有三个 Html 页面 home.html、destination.html 和 login.html。 Home.html 只有一个按钮,如果我单击此按钮并且用户已通过身份验证,则他将被重定向到destination.html,否则将重定向到 login.html(我正在使用内置登录功能并且工作正常),当用户是登录的特定用户名出现在 home.html 页面上,但是当我再次单击按钮时,它再次重定向到 login.html。

views.py 这是 home.html 和 destination.html 的视图部分,我使用内置函数进行身份验证。

from django.contrib import auth
from django.shortcuts import redirect, render
from rest_framework.permissions import IsAuthenticated



def home(request):
    if request.method == 'POST':
        user = auth.authenticate()
        if user is IsAuthenticated:
            return render(request, 'destination.html')
        else:
            return redirect('login/')
    else:
        return render(request, 'home.html')
def destination(request):
    return render(request, 'destination.html')

urls.py

from django.contrib import admin
from django.urls import path
from newapp import views
from django.contrib.auth.views import LoginView

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.home, name='home'),
    path('destination', views.destination, name= 'destination'),
    path('login/', LoginView.as_view(template_name='login.html')),
]

【问题讨论】:

    标签: django python-3.x django-rest-framework django-views


    【解决方案1】:

    试试这个:

    from django.contrib import auth
    from django.shortcuts import redirect, render
    from rest_framework.permissions import IsAuthenticated
    from django.contrib.auth.decorators import login_required
    from django.contrib.auth import authenticate, login, logout
    
    def home(request):
        if request.method == 'POST':
            user = authenticate()
            if user is not None:
                login(request, user)
                return render(request, 'destination.html')
            else:
                return redirect('login/')
        else:
            return render(request, 'home.html')
    @login_required
    def destination(request):
        return render(request, 'destination.html')
    

    在这里,我们检查用户是否为 None,然后开始一个会话,因此在该特定用户登录之前,创建的数据将不可用。 不要忘记在settings.py 中提及LOGIN_URL="/login/",这将有助于防止用户通过url 操作访问destination.html。 只有在会话开启时才有可能。

    【讨论】:

    • 如有任何疑问,请随时提出。
    • 问题仍然存在,当我点击按钮时,即使用户已登录,它仍然会进入登录页面
    • @RanaTalha 任何进一步的问题表示赞赏
    • 并尝试再次编辑您的问题,我花了很多时间才弄清楚您需要什么。
    猜你喜欢
    • 2018-03-17
    • 2012-12-30
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    • 2013-06-12
    • 2011-04-27
    相关资源
    最近更新 更多