python - 登录前后,我想使用相同的 URL,但使用不同的基于类的视图
问题描述
在用户登录之前和之后,许多网站的 URL 都没有改变。我应该如何在 Django 中实现这个?例如 http://example.com(显示登录页面)→登录→ http ://example.com (显示内容列表)
我想为登录页面(auth_views.LoginView)使用基于类的视图,然后在用户登录后,使用通用列表视图和不同的模板。
网址.py
from django.contrib.auth import views as auth_views
urlpatterns = [
path('', auth_views.LoginView.as_view(template_name='index.html'), name='index'),
视图.py
from django.views.generic import ListView
class UserIndexView(ListView):
model = mymodel
template_name = 'user_index.html'
解决方案
每个 URL 只能由一个视图提供服务。在同一个视图上处理多个操作(显示索引页面和处理登录)会使其更加复杂。
在 Django 中,通常的方法是使用单独的 URL 进行登录。
urlpatterns = [
path('', UserIndexView.as_view(), name='index',
path('login/', auth_views.LoginView.as_view(), name='login'),
]
然后,您可以使用LoginRequiredMixin
. 匿名用户将从主页重定向到登录页面,然后在登录后重定向回主页。
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import ListView
class UserIndexView(LoginRequiredMixin, ListView):
model = mymodel
template_name = 'user_index.html'
推荐阅读
- python - 为什么超参数“train_size”大于实际训练集大小?
- python - 从 URL 获取 XHR 信息
- javascript - 我怎样才能进入这个承诺?
- excel - Excel 到 XML 文件转换并发布到 RESTful Web 服务
- python - 使用 Python 中的列表推导将嵌套列表中的第二个值与第一个值相加
- typescript - 无法实例化 ColDef 变量
- lua - 如何制作一个lua文件?
- java - 如何使用来自 maven 的标签执行黄瓜功能?
- javascript - 数组在它应该更新之前
- python - 当我单击一个按钮以移动到 pygame、python 中的另一个屏幕时,我需要帮助清除菜单