django @login_required 为什么会自动重定向到/accounts/login/?next=/myblog/post/new/

在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配置项。例如:

python 复制代码
LOGIN_URL = '/custom_login/'

这样,当未登录用户试图访问需要登录的视图时,他们会被重定向到/custom_login/而不是默认的/accounts/login/

示例

展示如何使用@login_required以及如何自定义登录URL:

1. views.py
python 复制代码
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
python 复制代码
# Ensure you have the following setting
LOGIN_URL = '/custom_login/'
3. urls.py
python 复制代码
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地址。

py 复制代码
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')
相关推荐
夜光小兔纸27 分钟前
oracle查询出表中某几个字段值不唯一的数据
数据库·sql·oracle
deadknight92 小时前
Oracle密码过期处理方式
数据库·oracle
Ljubim.te2 小时前
数据库第01讲章节测验(选项顺序可能不同)
数据库
吱吱喔喔3 小时前
数据分表和分库原理
数据库·分表·分库
快乐非自愿3 小时前
KES数据库实践指南:探索KES数据库的事务隔离级别
数据库·oracle
一只fish3 小时前
Oracle的RECYCLEBIN回收站:轻松恢复误删对象
数据库·oracle
weixin_440401693 小时前
分布式锁——基于Redis分布式锁
java·数据库·spring boot·redis·分布式
TOR-NADO3 小时前
数据库概念题总结
数据库·oracle
云计算练习生3 小时前
理解MySQL核心技术:存储过程与函数的强大功能
数据库·mysql·存储过程·函数·mysql函数
zengson_g3 小时前
当需要对大量数据进行排序操作时,怎样优化内存使用和性能?
java·数据库·算法·排序算法