1π
The solution you got there is not the right solution, the right solution is to use the LOGIN_REDIRECT_URL
setting and point it to a view function, a named URL pattern or a direct URL.
Once a user is logged in using the default authentication mechanism of django, the request will automatically be redirected to this page.
Your second problem is when you logout a user, you want to be redirected to a specific URL. If you use the correct solution above, then all you need to do is:
-
Set
LOGOUT_URL
in yoursettings.py
. -
Create your logout view, it can be as simple as this example from the documentation:
from django.shortcuts import redirect from django.contrib.auth import logout def logout_view(request): logout(request) return redirect('/home/')
If you want to stick with your original solution, then modify it like this:
class HomeRedirectView(RedirectView):
pattern_name = 'home'
def get_redirect_url(self, *args, **kwargs):
if self.request.user.is_authenticated():
return "/user/{}/".format(self.request.user)
else:
return '/home/'
1π
I think you are overcomplicating things a little, the following will allow you to redirect to a user home page if a user is logged in, or it will display an un-logged in view. I have made the assumption that the username in the URL is purely for display purposes (otherwise it could be a security issue for your application.
urls.py
urlpatterns = patterns('myapp.views',
url(r'^/$', 'home', name='home'),
url(r'^user/[-_.\w\d]+/$', 'user_home', name='user-home'),
)
views.py
from django.contrib.auth.models import User
from django.shortcuts import redirect, render, get_object_or_404
def home(request):
"""
Home page
"""
# If a user is authenticated then redirect them to the user page
if request.user.is_authenticated:
return redirect('user-home', request.user.username)
else:
return render(request, "myapp/home.html")
@login_required
def user_home(request):
"""
User specific home page, assume the username in URL is just for decoration.
"""
return render(request, "mpapp/home_user.html", {
"user": request.user
}
- [Answered ]-Best way to implement depedent choices in Django models
- [Answered ]-Creating weight logic in django based off past 7 days
- [Answered ]-Why do I get this valueerror when I try to validate my from via recaptcha?
- [Answered ]-Rest Framework: HyperlinkedRelatedField, return multiple attributes?
- [Answered ]-In Django, form isn't rendered on browser