Httpreponse重定向到基于类的视图 [英] Httpreponse redirect to class based view

查看:110
本文介绍了Httpreponse重定向到基于类的视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

由于某种原因,我无法使用django的默认身份验证系统,因为我写了自定义登录功能。现在每个成功的登录我想要我的用户重定向到另一个应用程序类的视图。



ie:

 #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'),

/ pre>

现在我以上解决方法给出如下错误...


对于'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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆