Httpreponse重定向到基于类的视图 [英] Httpreponse redirect to class based view
问题描述
由于某种原因,我无法使用django的默认身份验证系统,因为我写了自定义登录功能。现在每个成功的登录我想要我的用户重定向到另一个应用程序类的视图。
ie:
#frontend / views.py
/ pre>
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'),
)
现在我以上解决方法给出如下错误...
对于'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
我错过了什么吗?或任何其他方式?
完整追溯:
环境:
请求方法:POST
请求URL:http://127.0.0.1:8000/accounts/login/
Django版本:1.7
Python版本:2.7.6
已安装的应用程序:
('django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'frontend',
'platform')
安装的中间件:
('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.m iddleware.clickjacking.XFrameOptionsMiddleware')
追溯:
文件/home/vijay/nightybuild/env/local/lib/python2.7/site-packages/django/ core / handlers / base.pyin get_response
111. response = wrapped_callback(request,* callback_args,** callback_kwargs)
文件/home/vijay/nightybuild/readtamil/frontend/views.py在login_user
49. return HttpResponseRedirect(reverse('UserProfileView',args =(user.username,)))
文件/home/vijay/nightybuild/env/local/lib/python2.7/反向
546.返回iri_to_uri(resolver._reverse_with_prefix(view,prefix,* args,** kwargs))
文件/ home / vijay / _reverse_with_prefix
463中的nightybuild / env / local / lib / python2.7 / site-packages / django / core / urlresolvers.py)(lookup_view_s,args,kwargs,len(patterns),patterns))
异常类型:NoReverseMatch at / accounts / login /
异常V alue:UserProfileView与参数'(u'username',)'和关键字参数'{}'未找到相反。 0模式尝试:[]
解决方案网址的名称。使用适当参数的名称。
from django.core.urlresolvers import reverse
...
登录(请求,用户)
返回HttpResponseRedirect(reverse('platform:user_profile_view',
args =(user.username,)))
#OR
return HttpResponseRedirect(reverse('platform:user_profile_view',
kwargs = {'user':user.username}))
注意:我认为视图接受用户名为参数。相应地更改
args
。For some reason i can not use django's default authentication system, for that i wrote custom login function. Now every success login i want my user redirect into another app class based view.
i.e:
#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'), )
Now my above workaround given below error...
Reverse for 'UserProfileView' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
#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
Am i missing something ..? or Any other way around this ?
Full 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: []
解决方案You defined a name for the url. Use the name with appropriate argument.
from django.core.urlresolvers import reverse ... login(request, user) return HttpResponseRedirect(reverse('platform:user_profile_view', args=(user.username,))) # OR return HttpResponseRedirect(reverse('platform:user_profile_view', kwargs={'user': user.username}))
NOTE: I assume the view accepts username as parameter. Change
args
accordingly.这篇关于Httpreponse重定向到基于类的视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!