使用Django登录需要Mixin

时间:2017-11-11 23:48:08

标签: django django-class-based-views

我有一个基于类的视图,我希望只有在用户登录时才能访问该视图,并且我希望将未经身份验证的用户重定向回索引页

这是有问题的观点:

class ArtWorkCreate(CreateView, LoginRequiredMixin):
    login_url = '/login/'
    redirect_field_name = 'login'
    model = ArtWork
    fields = ['userID','title','medium','status','price','description']

这是相关的模型

class ArtWork(models.Model):
    userID= models.ForeignKey(MyUser, on_delete=models.CASCADE)
    title = models.CharField(max_length=100)
    medium = models.CharField(max_length=50)
    price = models.FloatField()
    description = models.TextField(max_length=1000)
    status = models.CharField(max_length=4, default="SALE")

    def __str__(self):
        return self.title

这是相关的网址

 url(r'artwork/add/$', ArtWorkCreate.as_view(), name='artwork-add'),

这是我想重定向到用户未登录ID的网址

  url(r'^index/$', views.index, name='index'),

我的目标是使表单只对登录用户具有accessbile,他们只能以自己的名义添加艺术品项目

最后这是模型表格

class ArtWorkForm(ModelForm):
    class Meta:
        model = ArtWork
        fields = ['title','medium','status','price','description']

3 个答案:

答案 0 :(得分:3)

我们应该首先继承LoginRequiredMixin。因为python会考虑第一个继承类(在本例中)的方法dispatch

class ArtWorkCreate(LoginRequiredMixin, CreateView):
    login_url = '/index/'
    redirect_field_name = 'index'
    model = ArtWork

答案 1 :(得分:1)

login_url是未通过测试/身份验证的用户将被重定向到的URL。

redirect_field_name属性应设置为成功登录后将用户重定向到的URL。

来源:https://docs.djangoproject.com/en/3.0/topics/auth/default/#django.contrib.auth.mixins.AccessMixin.get_login_url

答案 2 :(得分:0)

只需在settings.py文件中定义一个登录URL (还要删除该类的登录网址)

#settings.py

LOGIN_URL = 'login'