Просмотр страницы администратора, если вошедший пользователь является администратором в Django
Я делаю проект на Django. Если пользователь является администратором, то после входа в систему администратор будет просматривать страницу профиля администратора. Но если пользователь является исследователем, то исследователь может просматривать страницу профиля исследователя после входа в систему.
django_project/settings.py
LOGIN_REDIRECT_URL = 'researcher-profile'
blog/views.py
from django.shortcuts import render
from .models import Post, Category
from django.views.generic import ListView
from django.contrib.auth.mixins import LoginRequiredMixin
from .forms import PostForm
# get all posts of the logged in user
class UserPostListView(LoginRequiredMixin, ListView):
model = Post # query the post model to create the list of articles
template_name = 'blog/researcher-profile.html'
context_object_name = 'posts'
ordering = ['-created']
def get_queryset(self):
return Post.objects.filter(author = self.request.user)
researcher-profile.html
{% extends 'users/base.html' %}
{% block content %}
{% for post in posts %}
{% if post.approved %}
<div class="card mb-3">
<img class="card-img-top" src="{{ post.image.url }}" alt="Card image cap">
<div class="card-body">
<h5 class="card-title">{{ post.title|truncatechars:70 }}</h5>
<p class="card-text">{{ post.content|truncatechars:200|safe }}</p>
<a href="{% url 'post-detail' post.aid %}" class="btn btn-primary"> See Details </a>
</div>
<div class="card-footer text-secondary">
<a class="mr-2" href="{% url 'researcher-profile' %}">{{ post.author }}</a>||
{{ post.created|date:"F d, Y" }}
</div>
</div>
{% endif %}
{% endfor %}
{% endblock content %}
admin-profile.html
{% extends 'users/base.html' %}
{% block content %}
<h1> Admin Post Apporval Portal</h1>
<br/><br/>
{% endblock content %}
Здесь, используя код blog/views.py, пользователи могут просматривать список постов, созданных ими самими после входа в систему. Но если пользователь является администратором, то я хочу, чтобы после входа в систему он переходил на страницу профиля администратора. Как решить эту проблему?
Вы перенаправляете пользователя на нужную целевую страницу через login представление, что-то вроде:
from django.contrib.auth import authenticate, login
from django.shortcuts import redirect
def my_view(request):
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
# Redirect to a success page.
if user.is_admin:
return redirect('/admin/profile/')
elif user.is_researcher:
return redirect('/researcher/profile/')
...
else:
# Return an 'invalid login' error message.
...
Поскольку вы не поделились своими моделями, я просто предположил наличие в них двух полей (is_admin и is_researcher). Конечно, идеальным сценарием является наличие групп с правами доступа.