Protecting View
We have to start protecting our views against non-authorized users. So far we have the following view to start new posts:
Views.py
from django.contrib.auth.decorators import login_required
@login_required
def new_topic(request, pk):
pass
If User Logged In
Views.py
from django.contrib.auth import login, authenticate, logout
if request.method == 'GET':
if request.user.is_authenticated:
return redirect('posts')
Html Template
Example 1 : Show Login/Logout Button Based On User Loggin/logout
{%if request.user.is_authenticated %}
<span>Hi {{ request.user.username | title }}</span>
<a href="{% url 'logout' %}">Logout</a>
{%else%}
<a href="{% url 'login' %}">Login</a>
{%endif%}
Example 2 : Show post Delete / Edit Option Based On User Loggin/Logout
{% if request.user.is_authenticated %}
<p>
<a href="{% url 'post-edit' post.id %}">Edit</a>
<a href="{% url 'post-delete' post.id%}">Delete</a>
</p>
{% endif %}
Only Owner Can Delete/Edit Post
@login_required
def edit_post(request, id):
queryset = Post.objects.filter(author=request.user)
post = get_object_or_404(queryset, pk=id)
if request.method == 'GET':
context = {'form': PostForm(instance=post), 'id': id}
return render(request,'blog/post_form.html',context)
Last updated