python - 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'
请告诉我我该怎么做。预先感谢。
解决方案
您必须@login_required
在功能基础视图上使用装饰器,并且
如果您要使用类基视图,有两种方法
- 通过
LoginRequiredMixin
使用继承 @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")
有很多可用的视图和 mixinUserPassTestMixin
等PermissionRequiredMixin
这里给出一个链接Views and mixin
如果您遇到任何问题,请在评论中告诉我
推荐阅读
- r - 函数内部 gt 表中的 cols_label
- javascript - 在拆分之前检查是否为 Null - Javascript
- r - 如何将一个数据帧逐行拆分成多个数据帧,然后导出到excel?R
- c++ - shared_ptr :没有实例化的分配
- javascript - 如何在 Angular 应用程序中运行 Lua 代码?
- java - 将 slf4j 与 log4j2 一起使用时无法实例化 SLF4J LoggerFactory
- micronaut - 我可以在 Micronaut 的默认配置文件中添加额外的配置文件吗?
- python - 无法在 label-studio 中添加 Ml 后端
- ruby-on-rails - 设计忘记密码呈现错误的模板 [已解决]
- python - Conda 环境 python 和 atom