在Django中,@login_required
装饰器用于确保用户在访问某个视图时已经登录。如果用户未登录,那么Django会自动重定向用户到登录页面。默认情况下,Django使用/accounts/login/
作为登录URL。如果用户试图访问一个需要登录的视图,比如/myblog/post/new/
,但未登录,Django会将用户重定向到/accounts/login/?next=/myblog/post/new/
。
这里的 next
参数告诉登录视图,在用户成功登录后,应将其重定向回到他们最初试图访问的页面。
如果你想自定义登录URL,可以在Django的设置文件settings.py
中更改LOGIN_URL
配置项。例如:
LOGIN_URL = '/custom_login/'
这样,当未登录用户试图访问需要登录的视图时,他们会被重定向到/custom_login/
而不是默认的/accounts/login/
。
示例
展示如何使用@login_required
以及如何自定义登录URL:
1. views.py
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
@login_required
def post_new(request):
# Your view logic here
return render(request, 'post_new.html')
2. settings.py
# Ensure you have the following setting
LOGIN_URL = '/custom_login/'
3. urls.py
from django.urls import path
from . import views
urlpatterns = [
path('myblog/post/new/', views.post_new, name='post_new'),
path('custom_login/', views.custom_login_view, name='custom_login'),
]
通过这些设置,未登录用户在访问/myblog/post/new/
时,将会被重定向到/custom_login/?next=/myblog/post/new/
。
局部指定
直接在view装饰器指定url地址。
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
@login_required(login_url='/custom_login/login')
def post_new(request):
# Your view logic here
return render(request, 'post_new.html')