如何在登录后重定向到用户请求的URL - Django loginrequiredmixin

时间:2017-09-21 07:04:22

标签: python django

我正在尝试使用 Django LoginRequiredMixin 来限制视图的访问权限。如果用户未登录,则会重定向到登录页面。但问题是登录后它没有重定向到用户输入的URL而是转到默认页面?

例如,用户尝试登录 site / site-create 页面。如果用户未登录,则转到登录页面。登录后,它将转到登录的默认页面。我想将用户重定向到 site / site-create 页面。示例视图

class CreateSite(LoginRequiredMixin, CreateView):
    model = Site
    fields = ['name','site_category','description',]

登录/ views.py

class LoginViewClass(FormView):
    """
    Provides the ability to login as a user with a username and password
    """
    form_class = AuthenticationForm
    template_name = 'login/login_view_class.html'

    def get_context_data(self, **kwargs):
       context = super(LoginViewClass, self).get_context_data(**kwargs)
       create_all_menus(ALL_MENUS)
       return context

    def post(self, request):
        username = self.request.POST['username']
        password = self.request.POST['password']
        user = authenticate(username=username, password=password)

编辑 - > 登录views.py已添加  我怎样才能做到这一点?谢谢

1 个答案:

答案 0 :(得分:2)

LoginRequiredMixin将重定向到login_url,将原始网址添加为参数redirect_field_name https://www.w3schools.com/angular/ng_ng-style.asp

login_urlredirect_field_name是您可以在视图中定义的两个属性,如下所示:

class MyView(LoginRequiredMixin, View):
    login_url = '/login/'
    redirect_field_name = 'redirect_to'

此示例将重定向到/login/?redirect_to={current_url}

当未指定时,这两个字段具有默认值:

在您的情况下,您的登录视图似乎没有next网址参数。这两个选项是:

  • 更改登录视图,使用next网址参数。
  • 通过添加redirect_field_name = 'your_field_name'
  • 更改视图以发送正确的重定向字段名称