Заранее благодарю за любую помощь, которую вы могли бы дать мне по этому вопросу.
Я бы хотел, чтобы пользователь автоматически перенаправлялся на другую страницу в моем веб-приложении Django в случае, если он нажмет накнопку, чтобы вернуться на последнюю страницу, или когда он вернется на страницу входа снова, я хотел бы отключить его, и когда он все еще вошел в систему и пытается получить доступ к странице регистрации, я бы отключил ее или перенаправить надругая страница с моего сайта.
Я уже пробовал LoginMixin и перенаправить, но ничего.когда я уже вошел и возвращаюсь на предыдущую страницу, я имею в виду страницу входа, я все еще вошел в систему, и у меня есть страница входа, даже когда я уже вошел в систему, то же самое я могу вернуться на страницу регистрации, но я уже вошел в систему.
Я использую Django 2.1.7 последней версии.Так что помощь любая помощь будет оценена.
Еще раз спасибо.
Вот мой код правильный.может быть, он может помочь кому-то еще.
def login(request):
if request.user.is_authenticated:
return redirect('index')
else:
if request.method == 'POST':
email = request.POST['email']
password = request.POST['password']
def get_next_url():
#request = self.request
next_ = request.GET.get('next')
next_post = request.POST.get('next')
redirect_path = next_ or next_post or None
if is_safe_url(redirect_path, request.get_host()):
return redirect_path
return 'user-home'
# def get_client_ip(request):
# x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
# if x_forwarded_for:
# ip = x_forwarded_for.split(',')[0]
# else:
# ip = request.META.get('REMOTE_ADDR')
# return ip
def get_ip_address_from_request(request):
""" Makes the best attempt to get the client's real IP or return the loopback """
PRIVATE_IPS_PREFIX = ('10.', '172.', '192.', '127.')
ip_address = ''
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR', '')
if x_forwarded_for and ',' not in x_forwarded_for:
if not x_forwarded_for.startswith(PRIVATE_IPS_PREFIX) and is_valid_ip(x_forwarded_for):
ip_address = x_forwarded_for.strip()
else:
ips = [ip.strip() for ip in x_forwarded_for.split(',')]
for ip in ips:
if ip.startswith(PRIVATE_IPS_PREFIX):
continue
elif not is_valid_ip(ip):
continue
else:
ip_address = ip
break
if not ip_address:
x_real_ip = request.META.get('HTTP_X_REAL_IP', '')
if x_real_ip:
if not x_real_ip.startswith(PRIVATE_IPS_PREFIX) and is_valid_ip(x_real_ip):
ip_address = x_real_ip.strip()
if not ip_address:
remote_addr = request.META.get('REMOTE_ADDR', '')
if remote_addr:
if not remote_addr.startswith(PRIVATE_IPS_PREFIX) and is_valid_ip(remote_addr):
ip_address = remote_addr.strip()
if not ip_address:
ip = request.META.get('REMOTE_ADDR')
ip_address = ip
return ip_address
try:
ip = get_ip_address_from_request(request)
user = User.objects.get(email=email)
if user.check_password(password) and user.is_active:
email = user.email
user = auth.authenticate(email=email, password=password)
auth.login(request, user)
alert_connection = User.objects.filter(connection_info=True)
if alert_connection:
base_url = getattr(settings, 'BASE_URL', 'http://www.dram-access.com')
context = {
'base_url': base_url,
'ip': ip,
'email': request.user.email,
'first_name': request.user.first_name,
'last_name': request.user.last_name
}
txt_ = get_template("accounts/emails/send_just_logged.txt").render(context)
html_ = get_template("accounts/emails/send_just_logged.html").render(context)
subject = 'New connection on your DreamAccess account'
from_email = settings.DEFAULT_FROM_EMAIL
recipient_list = [request.user.email]
send_mail(
subject,
message=txt_,
from_email=from_email,
recipient_list=recipient_list,
html_message = html_,
fail_silently=False,
)
messages.success(request, 'You are now logged in on DreamAccess')
next_path = get_next_url()
return redirect(next_path)
elif user.check_password(password):
qs = User.objects.filter(email=email)
if qs.exists():
#user email registered check active
not_active = qs.filter(is_active=False).exists()
confirm_email = EmailActivation.objects.filter(email=email, activated=False, forced_expired=False)
#is_confirmable = confirm_email.confirmable().exists()
if confirm_email and not_active:
return redirect('account-user-inactive')
elif not_active:
return redirect("send-reactivation-message")
else:
messages.error(request, "Your password is invalid")
return redirect('login')
except User.DoesNotExist:
messages.error(request, "This username and password doesn't exist on DreamAccess")
return redirect('login')
else:
return render(request, 'accounts/login.html')`
Код моей страницы регистрации:
def register(request):
if request.user.is_authenticated:
return redirect('index')
else:
form = RegisterForm(request.POST, request.FILES or None)
context = {
'form': form
}
if form.is_valid():
#form.save()
first_name = form.cleaned_data.get('first_name')
last_name = form.cleaned_data.get('last_name')
username = form.cleaned_data.get('username')
email = form.cleaned_data.get('email')
country = form.cleaned_data.get('country')
types = form.cleaned_data.get('types')
password = form.cleaned_data.get('password')
password2 = form.cleaned_data.get('password2')
phone = form.cleaned_data.get('phone')
profile_pic = form.cleaned_data.get('profile_pic')
new_user = User.objects.create_user(first_name, last_name, username, email, country, types, password, phone, profile_pic)
else:
return render(request, 'accounts/register.html', context)