好的,我有这个视图,我使用django PermissionRequiredMixin,当用户拥有change_item权限我指定那里一切正常
from django.contrib.auth.mixins import PermissionRequiredMixin
class MyView(PermissionRequiredMixin,View):
template = 'myapp/item_detail.html'
permission_required = 'myapp.change_item'
def get(self, request, *args, **kwargs):
#Query here
return render(request, self.template)
但是,当用户没有它时,我得到一个404错误页面,说myapp / login它无效:
**Page not found (404)
Request Method: GET
Request URL: http://127.0.0.1:8000/myapp/login?next=/myapp/item/35/**
The current URL, myapp/login, didn't match any of these.
登录它在设置LOGIN_URL中设置并与其他所有内容完美配合...但不是这个,我也看到一个登录字符串它位于错误的URL中间...我错过了一些关于mixins?,我做错了什么?
我添加了urls.py:
from django.conf.urls import url
from .views.views_home import HomeView, WelcomeView
from .views.views_authentication import LoginView, LogoutView, ChangePasswordView
urlpatterns = [
url(r'^welcome/$', WelcomeView.as_view(), name="welcome"),
url(r'^home/$', HomeView.as_view(), name="home"),
url(r'^login/$', LoginView.as_view(), name="login"),
url(r'^logout/$', LogoutView, name="logout"),
url(r'^change_password/$', ChangePasswordView.as_view(), name="change_password"),
]
堆栈跟踪:
[03/Oct/2016 17:04:47] "GET /myapp/item/35/ HTTP/1.1" 302 0
Not Found: /myapp/login
[03/Oct/2016 17:04:47] "GET /myapp/login?next=/myapp/item/35/ HTTP/1.1" 404 32312
提前致谢!!
答案 0 :(得分:1)
使用PermissionRequiredMixin时,您可以使用settings.py中的LOGIN_URL将用户重定向到当前页面。如果myapp / login /不是正确的位置,请使用此设置指定正确的位置。另外,您可以在视图中添加login_url
类成员,也可以添加get_login_url()
方法,而不是使用settings.LOGIN_URL。
所有这些都假设myapp / login不是正确的位置,如果这确实是您希望用户重定向到的位置,那意味着您在urls.py中有错误
最后但并非最不重要的是,在使用DRF时,习惯使用DjangoModelPermissions代替PermissionRequiredMixin