django - Django 阻止直接 url 访问
问题描述
可以说我有
.decs
def unwelcome_user(unwelcome_roles=[]):
def decorator(view_func):
def wrapper_func(request, *args, **kwargs):
if request.user.is_authenticated:
for group in request.user.groups.all():
if group.name in unwelcome_roles:
return redirect('main:unwelcome-user-type',
user_type=group.name)
else:
return view_func(request, *args, **kwargs)
else:
return view_func(request, *args, **kwargs)
return wrapper_func
return decorator
.url
urlpatterns = [
path('error-unwelcome/<str:user_type>', views.unwelcome_user, name='success')
]
.views
@unwelcome_user(unwelcome_roles=['xyz'])
def success(request)
return render(request, 'success_page.html', {})
def unwelcome_user(request, user_type):
return render(request, 'errors/unwelcome_user.html', {})
我可以通过在浏览器中键入类似 mysite.com/error-unwelcome/xyz 之类的内容直接访问 unwelcome_user 视图,即使不执行应导致显示该页面的后续过程。我该如何防止呢?
解决方案
我还是 Django 的新手,所以我无法尝试给出的 cookie/sessions 答案(我仍然需要学习会话)。与此同时,这就是我正在使用的:
def get_referer(request):
referer = request.META.get('HTTP_REFERER')
if not referer:
return None
return referer
那么在任何情况下
def my_view(request):
if not get_referer(request):
raise Http404
return render(request, 'sample.html', {})
在这里我假设如果没有引用者,那么这意味着在浏览器中输入 URL 的人。
推荐阅读
- google-sheets - 如何为不同的单元格创建相同的算法,但添加到同一个单元格
- websphere - “IBM WebSphere Application Server V9.0 的 Web 服务器插件”而不是 IM 的存档安装
- ruby-on-rails - 在我已经扩展 Devise:registrationsController 的类中添加来自 basecontroller 的过滤器之前
- python - 是否可以在两个按钮下制作进度条
- jquery - Google Analytics 中的跟踪锚链接无法正常工作
- python - 太阳系模拟 - 我的计算哪里出错了?
- php - 通过 laravel 和 sql 分组的问题
- php - 从我的服务器发送推送通知的好习惯?
- c# - 使用 Azure AD 和 SAML 2.0 使用私有 API
- excel - 使用外部复制的数据作为工作表名称