我有一个视图函数:
@login_required
def myview():
# do something
# respond something
pass
我该如何指定要重定向到的视图函数的确切URL?
我有一个视图函数:
@login_required
def myview():
# do something
# respond something
pass
我该如何指定要重定向到的视图函数的确切URL?
你可以在视图中这样做,不需要在settings.py中声明,这对我很有效。
from django.contrib.auth.decorators import login_required
@login_required(login_url='/example url you want redirect/') #redirect when user is not logged in
def myview(request):
do something
return something #returns when user is logged in
re_path(r"login$", LoginView.as_view(template_name="registration/login_form.html"), name="player_login")
,装饰器是@login_required(login_url ="player_login")
,它将替代设置中的login_url和login_url_redirect。感谢分享。 - Dooglelogin_required
会更好。 - Rishabh Agrahari默认的登录网址是:'/accounts/login/'。如果您想更改它,请前往settings.py。
LOGIN_URL='/path/to/url'
LOGIN_REDIRECT_URL='/path/to/redirecturl'
从文档中,这应该会对您有所帮助:https://docs.djangoproject.com/en/1.5/topics/auth/default/#the-login-required-decorator
@login_required(login_url='/accounts/login/')
def my_view(request):
...
前往setting.py文件
您可以在settings.py文件的任何位置添加此内容,但我更喜欢将其放在底部。
LOGIN_URL = '/login/'
注意:'/login/'是将用户带到登录页面的URL段。完整的URL类似于“myexample.com/login/”。
from django.urls import reverse_lazy
LOGIN_URL = reverse_lazy('login')
在您的代码中,您需要在每个函数前导入login_required和require login
from django.contrib.auth.decorators import login_required
@login_required()
def view_name(request):
pass
第二种方法
这种方法不可靠,因为您没有定义一个变量来保存您的登录URL命名空间
在您的视图中,您需要在每个函数之前导入login_required和require login
from django.contrib.auth.decorators import login_required
@login_required(login_url='/path/to/login/')
def view_name(request):
pass
Django 4+ 让这变得非常容易。
在 urls.py 中确保你有一个带有可引用名称的路径:
path('login/', login_view, name='login_name'),
接下来在settings.py文件中,你只需将以下代码添加到文末:
LOGIN_URL = 'login_name'
@login_required
装饰器的代码都会自动将未登录用户重定向到登录页面。如果您将来更改了该url,settings.py文件将保持更新,因为它引用名称而不是绝对url路径。path('login/', login_view, name='login_name'),
@login_required(login_url='login_name')
django.urls.reverse
函数,例如@login_required(login_url=reverse('login_name'))
。 - Fabian@login_required()
中不要使用反向操作,否则将会浪费一个小时来调试 :( 它会生成一个“循环”问题,并导致崩溃(即URL不再被识别)。 - Fabian我的登录/注册页面忽略了路径中的?next=...
部分,直接重定向到主页 '/'。
通过包含以下内容:
<input type="hidden" name="next" value="{{ request.GET.next }}">
在提交按钮后,重定向正常工作。
LOGIN_REDIRECT_URL = 'path/to/url'
接着在你的视图中引入这个LOGIN_REDIRECT_URL,并添加
`@login_required(login_url=LOGIN_REDIRECT_URL)`
如果您想限制视图的顶部,它将起作用。