是否可以在单一模型的基础上添加身份验证?

时间:2015-07-20 04:29:04

标签: python django django-rest-framework

models.py:

import datetime
from django.db import models
from pygments.lexers import get_all_lexers


LEXERS = [item for item in get_all_lexers() if item[1]]

class Classname(models.Model):
    class_name = models.CharField(max_length=8)
    def __str__(self):
        return self.class_name

class Sectionname(models.Model):
    class_name = models.ForeignKey(Classname)
    section_name = models.CharField(max_length=1, default='A')
    def __str__(self):
        return self.section_name

class Teachername(models.Model):
    classname = models.ForeignKey(Classname, verbose_name='class Name')
    secname = models.ForeignKey(Sectionname, verbose_name='sectionname')
    teachname = models.CharField(max_length=50, verbose_name='teacher Name')
    def __str__(self):
        return self.teachname

class Attendancename(models.Model):
    teacher_name = models.ForeignKey(Teachername)
    date = models.DateField('Date')
    intime = models.TimeField('IN-TIME')
    outtime = models.TimeField('OUT-TIME')

    def hours_conversion(self):
        tdelta = (datetime.datetime.combine(datetime.date.today(),self.outtime) - datetime.datetime.combine(datetime.date.today(),self.intime))
        hours, minutes = tdelta.seconds//3600, (tdelta.seconds//60)%60
    return '{0}hrs {1}mins'.format(hours, minutes)

    def __str__(self):
        return "%s" %self.teacher_name

serializers.py:

from django.forms import widgets
from rest_framework import serializers
from .models import Classname, Sectionname, Teachername, Attendancename


class ClassSerializer(serializers.ModelSerializer):
    class Meta:
        model = Classname
        fields = ('id', 'class_name',)

class SectionSerializer(serializers.ModelSerializer):
    class Meta:
        model = Sectionname
        fields = ('id', 'class_name', 'section_name')

class TeacherSerializer(serializers.ModelSerializer):
    class Meta:
        model = Teachername
        fields = ('id', 'classname', 'secname', 'teachname')

class AttendanceSerializer(serializers.ModelSerializer):
    class Meta:
        model = Attendancename
        fields = ('id', 'teacher_name', 'date', 'intime', 'outtime')

我想在我的模型中添加所有者字段以强制执行DRF身份验证系统。是否有必要在上面的所有模型中添加'owner'字段?

我正在关注django-rest-framework的教程我有几个模型如上所述。是否可以为此身份验证目的制作单个模型,并根据该模型和&amp ;;设置序列化程序文件中的权限。在单一模型的基础上访问所有模型?

1 个答案:

答案 0 :(得分:0)

  

我想在模型中添加所有者字段以强制执行DRF身份验证系统

您不需要所有者字段来强制执行"认证。

此处详细说明如何在DRF中启用和处理身份验证:http://www.django-rest-framework.org/api-guide/authentication/

所有者字段仅对某些权限案例感兴趣。

如果您查看docs,您会发现DRF已经附带IsAuthenticatedIsAdmin等常见案例的权限。根据用户的状态(登录/注销),他或她可能会看到某些资源。

但是,如果您要设置object level permissions,则需要所有者字段(或类似内容)。

如果某个用户确实与某个对象相关联,您还能判断出什么呢?

对于所有这些,默认的用户模型(来自django.contrib.auth)应该是完全足够的,我认为不需要任何额外的模型,假设您使用the standard Authentication Backends之一将request.user设置为用户的实例。