Py 3.6 // Django 2.1.4: доступ к профилю пользователя таинственным образом меняет статус user.is_authenticated на True - PullRequest
0 голосов
/ 24 декабря 2018

У меня эта проблема уже 2 недели, и я не могу ее решить.

У меня есть социальный веб-сайт, где пользователь может загрузить свои резюме для просмотра рекрутерам.

И когда я получаю доступ к профилю какого-либо пользователя, Navbar работает так, как будто я вошел в систему, а я - нет.

Я попытался исправить эту проблему с помощью get_queryset(), это сработало, но мне не удалось отобразитьданные профиля пользователя.

, поэтому я застрял с get().

Вот визуальное объяснение:

Как вы видите, на панели навигации написано Домой / Войти / Войти

Picture 1

Теперь, если я получу доступ к профилю Джона Доу, панель навигации переключится на Домой / Профиль / Выход из системы :

Picture 2

Вот мой код;

views.py :

class HomeProfile(ListView):
"Di splays all active users in db"

    template_name = 'profile/home_profile.html'
    queryset = MyModel.objects.filter(is_active=True)


class Get_Profile(DetailView):
"fetches user's profile"

    def get(self, request, pk):
        user = MyModel.objects.get(pk=pk)
        return render(request, 'profile/profile.html', {'user':user})

urls.py

urlpatterns = [

    path('homepage/profiles/', user_view.HomeProfile.as_view(), name='homepage'),
    path('homepage/profile/<int:pk>/', user_view.Get_Profile.as_view(), name='user-profile'),

]

base_test.html

<nav class="navbar navbar-expand-sm navbar-dark bg-dark sticky-top">
        <a class="navbar-brand" href="{% url 'home' %}">Navbar</a>
        <button class="navbar-toggler d-lg-none" type="button" data-toggle="collapse" data-target="#collapsibleNavId" aria-controls="collapsibleNavId"
            aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
        </button>
        <div class="collapse navbar-collapse" id="collapsibleNavId">
            <ul class="navbar-nav ml-auto mt-2 mt-lg-0">
                <li class="nav-item active">
                    <a class="nav-link" href="{% url 'homepage' %}">Home<span class="sr-only">(current)</span></a>
                </li>
                {% if not user.is_authenticated %}
                    <li class="nav-item">
                        <a class="nav-link" href="{% url 'login' %}">Log In</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="{% url 'signup' %}">Sign Up</a>
                    </li>
                {% else %}
                    <li class="nav-item">
                        <a class="nav-link" href="#">Profile</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link" href="{% url 'logout' %}">Log Out</a>
                    </li>
                {% endif %}
            </ul>
        </div>
    </nav>

home_profile.html

<!-- this is the home template that displays all active users -->

{% extends 'base_test.html' %}

{% block title %} My Site | Profiles {% endblock title %}

{% block content  %}

   <div class="card-columns text-center padding">
   {% for user in mymodel_list %}
       <div class="card">
           <img class="rounded-circle" src="{{user.profile.image.url}}" width=150 height=150>
           <div class="card-body">
               <h5 class="card-title">Full name : {{user.get_full_name}}</h5>
               <p class="crad-text">Occupation/job : {{user.profile.occupation}}</p>
               <a type="button" href="{% url 'user-profile' user.pk %}" style="color:whitesmoke;" class="btn btn-primary btn-sm">Profile</a>
           </div>
       </div>
    {% endfor %}
   </div>
{% endblock content  %}

{% block footer %}

{% endblock footer %}

profile.html

<!-- user profile template -->
{% extends 'base_test.html' %}
{% load custom_tags %}

{% block title %} My Site | {{user.get_full_name}} {% endblock title %}

{% block content %}
<div class="container">
    <div class="row">
        <div class="col-lg-8 order-lg-2 padding">
            <div class="tab-content">
                <div class="tab-pane active" id="profile">
                    <div class="row">
                        <div class="col-lg-12">
                            <h6><strong>About</strong></h6>
                            <p>
                                {{user.profile.bio}}
                            </p>
                            <hr>
                        </div>
                        <div class="col-lg-12">
                            <h6><strong>Skills</strong></h6>
                            {% for skill in user.profile.skills|split:',' %}
                                <span class="badge badge-primary">{{skill}}</span>
                            {% endfor %}
                            <hr>
                            <h6><strong>Hobbies</strong></h6>
                            <p>
                                {% for hobbie in user.profile.hobbies|split:',' %}
                                    <span class="badge badge-success">{{hobbie}}</span>
                                {% endfor %}
                            </p>
                            <hr>
                        </div>
                       <!-- removes the social part -->
                    </div>
                </div>
            </div>
        </div>
        <div class="col-lg-4 order-lg-1 padding">
            <h1 class="mb-3 text-center">{{user.get_full_name}}</h1>
            <hr>
            <img src="{{user.profile.image.url}}" class="mx-auto img-fluid rounded-circle d-block" alt="avatar" width=150><br>

            <div class="text-center">
                <h4>{{user.profile.school}}</h4>
                <p><strong>Hometown :</strong> {{ user.profile.hometown}}</p>
                <p><strong>Current City:</strong> {{user.profile.location}}<p>
                <p><strong>Occupation/Job:</strong> {{user.profile.occupation}}<p><br>
                <hr>
                <button type="button" class="btn btn-outline-success btn-md">View CV</button>
            </div>
        </div>
    </div>
</div>
{% endblock content %}

{% block footer %}

{% endblock footer %}

Не знаю Whэто вызывает странное поведение !!

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Вы использовали то же имя переменной, user, для пользователя, профиль которого вы просматриваете, и для пользователя, который фактически использует сайт.Вам нужно выбрать другое имя.

(Кроме того, не связано, но вам не нужно - и не нужно - определять метод get в подробном представлении.)

0 голосов
/ 24 декабря 2018

На самом деле, вы путаетесь с request.user и вашим пользовательским объектом для резюме.Вам следует изменить имя переменной контекста с user на другое.например:

class Get_Profile(DetailView):
"fetches user's profile"

    def get(self, request, pk):
        user = MyModel.objects.get(pk=pk)
        return render(request, 'profile/profile.html', {'profile':user})  # <-- Here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...