Ограничить несанкционированный доступ в Django - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть различные приложения в проекте Django, но я хочу, чтобы только те пользователи, которые вошли в систему, имели доступ к этим страницам. Как я могу ограничить доступ ко всем страницам, кроме страницы входа, которая является моей главной страницей. Например, mywebsite.com/home/user должен быть доступен только пользователю, и если кто-то наберет его, он должен перенаправить его на mywebsite.com

В настоящее время у меня есть два приложения, основное и Домашнее, я использую ClassBased просмотров в моем домашнем приложении, как я могу ограничить доступ ко всем моим страницам, кроме страницы входа и показать сообщение?

Я хочу создать шаблон, чтобы пользователи могли видеть другие данные профиля пользователя но не изменять или редактировать их. Как я могу выполнить эти шаги

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

Вы можете попробовать это, очень простым способом

from django.contrib.auth.decorators import login_required


@login_required
def my_view(request):
    return HttpResponse()

с использованием @ login_required означает, что пользователь должен войти в систему для доступа к этому представлению

Или если вы хотите чтобы использовать класс, попробуйте это

from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import TemplateView


class RestrictedView(LoginRequiredMixin, TemplateView):
    template_name = 'foo/restricted.html'
    raise_exception = True 
    permission_denied_message = "You are not allowed here."
0 голосов
/ 28 февраля 2020

Согласно Документам вы можете украсить представления на основе классов с помощью @ login_required

from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator

@method_decorator(login_required, name='dispatch')
class ClassBasedView(View): 
    ...
    ...

Поскольку вы используете представление на основе классов, вам необходимо добавить метод декоратор, иначе вы можете использовать @logine_required напрямую.

И другая часть вопроса опять же отделена от этой.

...