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')
相关推荐
2301_766283449 分钟前
Golang怎么实现防重复提交_Golang如何用Token机制防止表单重复提交【技巧】
jvm·数据库·python
qq_414256579 分钟前
CSS如何实现元素在容器内居中_利用margin-auto技巧
jvm·数据库·python
2401_8242226910 分钟前
如何用 Transferable 对象零拷贝转移超大数组内存给子线程
jvm·数据库·python
SilentSamsara11 分钟前
Python 并发基础:threading/GIL 与 multiprocessing 的选型逻辑
服务器·开发语言·数据库·vscode·python·pycharm
m0_4954964111 分钟前
如何禁用 Vite 中的热更新(HMR)以避免 React 应用加载中断
jvm·数据库·python
m0_7411733312 分钟前
MySQL中如何使用CAST实现类型转换_MySQL数据类型转换技巧
jvm·数据库·python
qq_4135020212 分钟前
如何用 bubbles 属性让自定义事件穿透多个 Web Components
jvm·数据库·python
地球资源数据云13 分钟前
2015年中国30米分辨率沼泽湿地空间分布数据集
大数据·数据结构·数据库·人工智能·机器学习
2301_7756398914 分钟前
如何修改Oracle服务器默认的日期格式_NLS_DATE_FORMAT全局配置
jvm·数据库·python
2401_8314194415 分钟前
React 中父子组件函数传递的正确调用方式
jvm·数据库·python