首页 > 解决方案 > django中的登录重定向网址

问题描述

我正在建立一个有客户和商家的网站。他们每个人都有不同的登录名。我想要的是每个用户登录到他自己的视图。

模型.py

class User(AbstractUser):
    is_customer=models.BooleanField(default=False)
    is_merchant=models.BooleanField(default=False)



class Customer(models.Model):
    user=models.OneToOneField(User,on_delete=models.CASCADE, primary_key=True)

class Merchant(models.Model):
    #user = models.ForeignKey(User, on_delete=models.CASCADE)
user=models.OneToOneField(User,on_delete=models.CASCADE, primary_key=True)

视图.py

#merchant view
def users_homepage(request):
    product = Product.objects.filter(merchant=request.user.merchant).order_by('date_added')
    itemsordered=OrderItem.objects.filter(merchant=request.user.merchant)
#customer view
def index(request):
    listing=Category.objects.all()
    product=Product.objects.all()[:8]

设置.py

LOGIN_REDIRECT_URL='/users'

请告诉我我该怎么做。预先感谢。

标签: pythonpython-3.xdjangodjango-modelsdjango-views

解决方案


您必须@login_required在功能基础视图上使用装饰器,并且

如果您要使用类基视图,有两种方法

  1. 通过LoginRequiredMixin使用继承
  2. @login_required在方法或类级别上也是如此

这里举个例子

  • 首次使用功能基础视图,说明需要登录
from django.contrib.auth.decorators import login_required

@login_required
def my_first_view(request):
    return HttpResponse("Welcome")

# if not define in settings.py 
from django.contrib.auth.decorators import login_required

@login_required(login_url='/accounts/login/')
def my_second_view(request):
    return HttpResponse("Welcome")

看到这个博客装饰器需要登录

  • 第二种使用类基视图LoginRequiredMixin
from django.contrib.auth.mixins import LoginRequiredMixin

 class ProfileCBV(LoginRequiredMixin, View):
    login_url = '/cbs/login' # if not define in settings.py
    def get(self, request, *args, **kwargs):
        return HttpResponse("Welcome")
  • 三是类基础视图中需要登录
from django.contrib.auth.decorators import login_required
 url(r'^profile/$', login_required(views.ProfileCBV.as_view()))

# if use in views.py
from django.contrib.auth.decorators import login_required
from django.utils.decorators        import method_decorator

@method_decorator([login_required], name='dispatch')
class ProfileCBV(View):
    def get(self, request, *args, **kwargs):
        return HttpResponse("Welcome")

有很多可用的视图和 mixinUserPassTestMixinPermissionRequiredMixin这里给出一个链接Views and mixin

如果您遇到任何问题,请在评论中告诉我


推荐阅读