По какой-то причине я не могу использовать систему проверки подлинности по умолчанию django, поскольку я написал пользовательскую функцию входа. Теперь каждый успешный вход в систему я хочу, чтобы мой пользователь перенаправлялся на другой вид на основе класса приложения.Httpreponse перенаправляет на класс, основанный на представлении
т.е:
#frontend/views.py
login(request, user)
return HttpResponseRedirect(reverse('platform:UserProfileView'))
#frontend/urls.py
urlpatterns = patterns('frontend.views',
url(r'^$', 'base_view', name='base_view'),
url(r'^accounts/login/$', 'login_user', name='login_user')
)
#platform/urls.py
urlpatterns = patterns('platform.views',
url(r'^(?P<user>.+)$', UserProfileView.as_view(), name='user_profile_view'),
)
Теперь мой выше обходной путь приведены ниже ошибки ...
Reverse для 'UserProfileView' с аргументами '()' и именованных аргументов '{}' не найден. 0 шаблон (ы) попытался: []
#platform/vies.py
class UserProfileView(View):
@method_decorator(login_required)
def get(self, request, user):
if request.user.username == user:
profile = request.user
return render(request, 'app/homepage.html', {'profile': profile})
else:
raise Http404
я упускаю что-то ..? или любым другим способом вокруг этого?
Полный Traceback:
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/accounts/login/
Django Version: 1.7
Python Version: 2.7.6
Installed Applications:
('django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'frontend',
'platform')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware')
Traceback:
File "/home/vijay/nightybuild/env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
111. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/vijay/nightybuild/readtamil/frontend/views.py" in login_user
49. return HttpResponseRedirect(reverse('UserProfileView', args=(user.username,)))
File "/home/vijay/nightybuild/env/local/lib/python2.7/site-packages/django/core/urlresolvers.py" in reverse
546. return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))
File "/home/vijay/nightybuild/env/local/lib/python2.7/site-packages/django/core/urlresolvers.py" in _reverse_with_prefix
463. (lookup_view_s, args, kwargs, len(patterns), patterns))
Exception Type: NoReverseMatch at /accounts/login/
Exception Value: Reverse for 'UserProfileView' with arguments '(u'username',)' and keyword arguments '{}' not found. 0 pattern(s) tried: []
Теперь ошибка совпадает с аргументом {u'username} ..... А также я обновил свой вопрос с помощью класса. Скажите, что это имя пользователя ok или еще? – 2014-09-20 09:33:30
@ iask, я не понимаю вашего комментария. Если вы имеете в виду, что получаете ошибку, можете ли вы показать полную трассировку? – falsetru
@iask. Как я писал в ответ, используйте имя url, а не имя класса: 'reverse ('UserProfileView', ...)' -> 'reverse ('user_profile_view', ...)' – falsetru