Когда я перехожу на страницу профиля другого пользователя, тег {{user}} на base.html для проекта (не приложения) изменяется. как я могу остановить это от этого? - PullRequest
0 голосов
/ 05 мая 2018

Я создаю своего рода реплику 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 %}

1 Ответ

0 голосов
/ 05 мая 2018

Место, в котором вы устанавливаете переменную user для отображения имени пользователя, вошедшего в систему, не отображается в вашем коде.

В любом случае, поскольку вы вводите данные профиля пользователя в переменную user, она отображается на ярлыке Signed in as:.

Данные о зарегистрированном пользователе могут быть легко получены из request.user, без вмешательства в какие-либо контекстные данные. Проверьте вывод следующего ...

<p>Signed in as: {{request.user}}</p>
...