misc: add a profile view for authenticated users
This commit is contained in:
parent
4f856c0705
commit
64984d69d5
34
aircox/templates/accounts/profile.html
Normal file
34
aircox/templates/accounts/profile.html
Normal file
|
@ -0,0 +1,34 @@
|
|||
{% extends "aircox/base.html" %}
|
||||
{% load i18n aircox %}
|
||||
|
||||
{% block head_title %}
|
||||
{% block title %}{{ user.username }}{% endblock %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content-container %}
|
||||
<div class="container content page-content">
|
||||
<h2 class="subtitle">Mon Profil</h2>
|
||||
{% translate "Username" %} : {{ user.username|title }}<br/>
|
||||
<!-- Connexion: {{ user.last_login }} -->
|
||||
|
||||
<h2 class="subtitle is-1">Mes émissions</h2>
|
||||
{% if programs|length %}
|
||||
<ul>
|
||||
{% for p in programs %}
|
||||
<li>{{ p.title }} :
|
||||
|
||||
<a href="{% url 'program-detail' slug=p.slug %}">
|
||||
<span title="{% translate 'View' %} {{ page }}">{% translate 'View' %}</span>
|
||||
</a>
|
||||
|
||||
<a href="{% url 'program-edit' pk=p.pk %}">
|
||||
<span title="{% translate 'Edit' %} {{ page }}">{% translate 'Edit' %} </span>
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
{% trans 'You are not listed as a program editor yet' %}
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -72,16 +72,21 @@ Usefull context:
|
|||
</a>
|
||||
{% endif %}
|
||||
{% if user.is_authenticated %}
|
||||
<div class="navbar-item">
|
||||
<a>{{ user.username }}</a> <a href="{% url 'logout' %}"> <i class="fa fa-power-off"></i></a>
|
||||
</div>
|
||||
<a class="nav-item" href="{% url "profile" %}" target="new">
|
||||
{% translate "Profile" %}
|
||||
</a>
|
||||
<a class="nav-item" href="{% url "logout" %}" title="{% translate "Disconnect" %}"
|
||||
aria-label="{% translate "Disconnect" %}">
|
||||
<i class="fa fa-power-off"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
</nav>
|
||||
{% endblock %}
|
||||
|
||||
{% block secondary-nav %}{% endblock %}
|
||||
{% endblock %}
|
||||
</div>
|
||||
|
||||
{% block main-container %}
|
||||
|
@ -95,6 +100,8 @@ Usefull context:
|
|||
{% endblock %}
|
||||
{% endspaceless %}
|
||||
|
||||
|
||||
|
||||
{% block header-container %}
|
||||
{% if page or cover or title %}
|
||||
<header class="container header preview preview-header {% if cover %}has-cover{% endif %}">
|
||||
|
|
|
@ -10,3 +10,13 @@ def test_authenticate(user, client, program):
|
|||
r = client.post(reverse("login"), kwargs={"username": "foo", "password": "bar"})
|
||||
assert b"errorlist" in r.content
|
||||
assert client.login(username="user1", password="bar")
|
||||
|
||||
|
||||
@pytest.mark.django_db()
|
||||
def test_profile_programs(user, client, program):
|
||||
client.force_login(user)
|
||||
r = client.get(reverse("profile"))
|
||||
assert program.title not in r.content.decode("utf-8")
|
||||
user.groups.add(program.editors)
|
||||
r = client.get(reverse("profile"))
|
||||
assert program.title in r.content.decode("utf-8")
|
||||
|
|
|
@ -127,4 +127,6 @@ urls = [
|
|||
views.errors.NoStationErrorView.as_view(),
|
||||
name="errors-no-station",
|
||||
),
|
||||
path("gestion/", views.ProfileView.as_view(), name="profile"),
|
||||
path("accounts/profile/", views.ProfileView.as_view(), name="profile"),
|
||||
]
|
||||
|
|
|
@ -11,6 +11,7 @@ from .page import (
|
|||
PageDetailView,
|
||||
PageListView,
|
||||
)
|
||||
from .profile import ProfileView
|
||||
from .program import (
|
||||
ProgramDetailView,
|
||||
ProgramListView,
|
||||
|
@ -38,6 +39,7 @@ __all__ = (
|
|||
"BasePageListView",
|
||||
"PageDetailView",
|
||||
"PageListView",
|
||||
"ProfileView",
|
||||
"ProgramDetailView",
|
||||
"ProgramListView",
|
||||
"ProgramPageDetailView",
|
||||
|
|
15
aircox/views/profile.py
Normal file
15
aircox/views/profile.py
Normal file
|
@ -0,0 +1,15 @@
|
|||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.views.generic.base import TemplateView
|
||||
|
||||
from aircox.models import Program
|
||||
from aircox.views import BaseView
|
||||
|
||||
|
||||
class ProfileView(LoginRequiredMixin, BaseView, TemplateView):
|
||||
template_name = "accounts/profile.html"
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
groups = self.request.user.groups.all()
|
||||
programs = Program.objects.filter(editors__in=groups)
|
||||
kwargs.update({"user": self.request.user, "programs": programs})
|
||||
return super().get_context_data(**kwargs)
|
Loading…
Reference in New Issue
Block a user