使用 Django 登录需要 Mixin

Bro*_*don 12 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']
Run Code Online (Sandbox Code Playgroud)

这是相关的模型

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
Run Code Online (Sandbox Code Playgroud)

这是相关的网址

 url(r'artwork/add/$', ArtWorkCreate.as_view(), name='artwork-add'),
Run Code Online (Sandbox Code Playgroud)

这是我想重定向到用户未登录的 URL id

  url(r'^index/$', views.index, name='index'),
Run Code Online (Sandbox Code Playgroud)

我的目标是使表单只能访问登录用户,他们只能在他们自己的名字下添加艺术品项目

最后这是模型形式

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

anj*_*505 17

我们应该继承第LoginRequiredMixin一个。因为 python 会考虑dispatch第一个继承类的方法(在这种情况下)。

from django.contrib.auth.mixins import LoginRequiredMixin

class ArtWorkCreate(LoginRequiredMixin, CreateView):
    login_url = '/index/'
    redirect_field_name = 'index'
    model = ArtWork
Run Code Online (Sandbox Code Playgroud)


小智 5

只需在 settings.py 文件中定义一个登录 url(同时删除类上的登录 url)

#settings.py

LOGIN_URL = 'login'
Run Code Online (Sandbox Code Playgroud)