Reputation: 2189
How do I make a view to be only accessible through redirect and from a only a particular view?
urls.py:
#Assuming namespace = 'myApp'
url(r'^redarekt/$', views.redarekt, name='redarekt'),
url(r'^reciva/$', views.reciva, name='reciva'),
views.py:
@login_required()
def redarekt(request):
if request.user.is_authenticated() and request.user.is_active:
return HttpResponseRedirect(reverse('myApp:reciva'))
@login_required()
def reciva(request):
if request.user.is_authenticated() and request.user.is_active:
#CHECK IF IT IS A REDIRECT AND COMING FROM redarekt
execute(request)
raise Http404
raise Http404
How do I make reciva
to be only accessible through redirect and from a only redarekt
?
Upvotes: 2
Views: 2311
Reputation: 23484
You can use request.session
@login_required()
def redarekt(request):
if request.user.is_authenticated() and request.user.is_active:
request.session['pp_redarekt'] = True
return HttpResponseRedirect(reverse('myApp:reciva'))
@login_required()
def reciva(request):
if request.user.is_authenticated() and request.user.is_active:
if 'pp_redarekt' in request.session:
execute(request)
del request.session['pp_redarekt']
raise Http404
raise Http404
'pp_redarekt'
stands for Previous Page 'redarekt'
So basically, before redirecting to reciva(request)
view you're setting adding session key, that says that previous page was redarekt
. When you handle your request in reciva
view, you are deleting that key, so user won't be able to enter reciva
twice or more.
But for doing so, you need to setup your sessions. Guide and docs
Upvotes: 7