Я создаю своего рода реплику Facebook, но всякий раз, когда я захожу на чужую страницу профиля, он автоматически входит в свою учетную запись. Я посмотрел на код, и кажется, что объект 'user' в base.hmtl постоянно меняется. вот что у меня есть:
accounts.views.py
from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.models import User
from django.contrib import auth
from groups.models import Group
from posts.models import Post
from friends.models import Friend
# Create your views here.
def home(request):
return render(request, 'accounts/home.html')
def signup(request):
if request.method == 'POST':
if request.POST['password1'] == request.POST['password2']:
try:
User.objects.get(username=request.POST['username'])
return render(request, 'accounts/signup.html', {'error': "An account with this username already exists"})
except User.DoesNotExist:
user = User.objects.create_user(request.POST['username'], password=request.POST['password1'])
auth.login(request, user)
return redirect('groups:index')
else:
return render(request, 'accounts/signup.html', {'error':'The passwords do not match'})
else:
return render(request, 'accounts/signup.html')
def login(request):
if request.method == 'POST':
user = auth.authenticate(username=request.POST['username'], password=request.POST['password1'])
if user is not None:
auth.login(request, user)
return redirect('groups:index')
else:
return render(request, 'accounts/login.html', {'error':"An account with this information does not exist"})
else:
return render(request, 'accounts/login.html')
def logout(request):
if request.method == 'POST':
auth.logout(request)
return redirect('accounts:login')
def profile(request, user_id):
user = get_object_or_404(User, pk=user_id)
groups = user.group_set.all()
posts = Post.objects.filter(author=user)
# get grabs one instance, so you grab an instance of friend.
# you locate the friends list by its owner, which is 'current_user' in this case
friend = Friend.objects.get(current_user=request.user)
friends = friend.users.all()
return render(request, 'accounts/profile.html', {'user':user, 'groups':groups, 'posts':posts, 'friends':friends})
когда вы нажимаете на ссылку на страницу профиля другого пользователя со страницы своего профиля, он переходит к этому пользователю, но также входит в его профиль.
accounts.profile.html:
<h2>My Friends</h2>
<div class="my_friends">
<ul class="list-group list-group-flush">
{% for friend in friends %}
<li class="list-group-item"><a href="{% url 'accounts:profile' friend.id %}">{{friend.username}}</a></li>
{% endfor %}
</ul>
</div>
файл URL для аккаунтов находится здесь:
from . import views
from django.urls import path
app_name = 'accounts'
urlpatterns = [
path('login/', views.login, name='login'),
path('logout/', views.logout, name='logout'),
path('profile/<int:user_id>', views.profile, name='profile'),
]
объект {{user}} постоянно меняется, мне нужно помешать ему это сделать.
base.hmtl:
{% if user.is_authenticated %}
<p>Signed in as: {{user}}</p>
<a href="javascript:{document.getElementById('logout').submit()}"><span class="glyphicon glyphicon-off login_out"></span></a>
<form id='logout' action="{% url 'accounts:logout' %}" method="post">
{% csrf_token %}
<input type="hidden" >
</form>
<div class="sessions_info">
<a href="{% url 'accounts:profile' %}"><span class="glyphicon glyphicon-user profile-icon"></span></a>
</div>
{% else %}
<a href="{% url 'accounts:login' %}"><span class="glyphicon glyphicon-log-in login_out"></span></a>
{% endif %}