如何知道Django中的@login_requested装饰器将哪个页面重定向到登录URL



我有两个页面,用户需要登录才能访问,这两个页面都使用@login_requested装饰器重定向到登录URL

@login_required
def ask_question(request)

@login_required
def answer_question(request)

我想在登录页面上显示一条消息,这将是特定的,具体取决于重定向到登录的页面。

两个页面在同一页面上都有一个链接,在索引页面上,所以我不能使用请求来源,因为这两个页面的来源相同。

类似:

"您需要登录才能提出问题";(如果用户来自提问重定向(

"您需要登录才能回答问题";(如果用户来自答案重定向(

您可以将django的messages框架用于这两个页面。

例如:

如果有人在question页面上,从按钮上说出其名称ask question,因此对其进行如下查看:

from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.shortcuts import render
@login_required(login_url='/login-route/')
def ask_question(request):
messages.success(request, 'You need to login to ask the question.')
context{}
return render(request,'appname/anyfile.html',context)

@login_required(login_url='/login-route/')
def answer_to_an_question(request):
context={}
messages.success(request, 'You need to login to answer the question.')
return render(request,'appname/anyfile.html',context)

您可以使用任何messages,如error,success,warning等,然后它会将其重定向到下一个url。然后在用户所在的redirected页面上,会出现消息,比如说这是一个login页面,您可以在其中以以下格式显示它:

{% if messages %}
<ul class="messages">
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}

使用djangomessages的最佳部分是它只会出现one次。

例如

@login_required(login_url='signin')
write your views here
return render(request, 'path/#####.html', context )

当用户登录您的回报将带他到您想要的页面

最新更新