From d6b1c4e81f15e6768905947a550f46c4de47b0e2 Mon Sep 17 00:00:00 2001 From: xianfuxing Date: Wed, 18 Jul 2018 20:19:01 +0800 Subject: [PATCH] =?UTF-8?q?#=20=E8=87=AA=E5=AE=9A=E4=B9=89=E7=94=A8?= =?UTF-8?q?=E6=88=B7model?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/accounts/models.py | 40 +++++++++++++++++++++++++++++++++++++- apps/mosquito/api/views.py | 2 ++ apps/smart/api/views.py | 2 ++ mosqkiller/settings.py | 4 +++- 4 files changed, 46 insertions(+), 2 deletions(-) diff --git a/apps/accounts/models.py b/apps/accounts/models.py index 71a8362..4f0ff10 100644 --- a/apps/accounts/models.py +++ b/apps/accounts/models.py @@ -1,3 +1,41 @@ +import os from django.db import models +from django.contrib.auth.models import AbstractUser +from imagekit.models import ImageSpecField +from imagekit.processors import ResizeToFill +from imagekit.exceptions import MissingSource -# Create your models here. + +def avatar_path(instance, filename): + return os.path.join('avatar', instance.username, filename) + + +class User(AbstractUser): + ROLES = ( + ('admin', 'admin'), + ('editor', 'editor') + ) + phone = models.CharField(max_length=11, null=True, blank=True, default='', verbose_name='电话') + department = models.CharField(max_length=20, null=True, blank=True, default='', verbose_name='部门') + position = models.CharField(max_length=50, null=True, blank=True, default='', verbose_name='职位') + introduction = models.TextField(verbose_name='简介') + role = models.CharField(max_length=20, default='admin', choices=ROLES, verbose_name='角色') + avatar = models.ImageField(upload_to=avatar_path, null=True, blank=True) + avatar_thumbnail = ImageSpecField(source='avatar', + processors=[ResizeToFill(100, 100)], + format='JPEG', + options={'quality': 100}) + + class Meta: + verbose_name = '用户' + verbose_name_plural = verbose_name + + def avatar_url(self): + try: + avatar_thumbnail_url = self.avatar_thumbnail.url + except MissingSource: + avatar_thumbnail_url = '' + return avatar_thumbnail_url + + def __str__(self): + return self.username diff --git a/apps/mosquito/api/views.py b/apps/mosquito/api/views.py index a3b29c7..cfaf83c 100644 --- a/apps/mosquito/api/views.py +++ b/apps/mosquito/api/views.py @@ -14,6 +14,7 @@ from .serializers import MosqListSerializer, MosqPostListSerializer class MosquitoListAPIView(ListAPIView): serializer_class = MosqListSerializer + permission_classes = [IsAuthenticated] filter_backends = [SearchFilter, OrderingFilter] pagination_class = PostLimitOffsetPagination search_fields = ['name', 'device_id', 'region'] @@ -32,6 +33,7 @@ class MosquitoListAPIView(ListAPIView): class MosquitoPostListAPIView(ListAPIView): serializer_class = MosqPostListSerializer + permission_classes = [IsAuthenticated,] filter_backends = [SearchFilter, OrderingFilter] pagination_class = PostLimitOffsetPagination search_fields = ['mosq__name', 'mosq__region'] diff --git a/apps/smart/api/views.py b/apps/smart/api/views.py index 9e513b8..40485b7 100644 --- a/apps/smart/api/views.py +++ b/apps/smart/api/views.py @@ -14,6 +14,7 @@ from ..models import SmartModule, SmartPush class SmartListAPIView(ListAPIView): serializer_class = SmartListSerializer + permission_classes = [IsAuthenticated] filter_backends = [SearchFilter, OrderingFilter] pagination_class = PostLimitOffsetPagination search_fields = ['name', 'device_id', 'chip_id', 'region'] @@ -34,6 +35,7 @@ class SmartListAPIView(ListAPIView): class SmartPushListAPIView(ListAPIView): serializer_class = SmartPushListSerializer + permission_classes = [IsAuthenticated] filter_backends = [SearchFilter, OrderingFilter] pagination_class = PostLimitOffsetPagination search_fields = ['smart__name'] diff --git a/mosqkiller/settings.py b/mosqkiller/settings.py index 6dfc71f..cdd4a72 100644 --- a/mosqkiller/settings.py +++ b/mosqkiller/settings.py @@ -41,6 +41,7 @@ INSTALLED_APPS = [ 'django.contrib.staticfiles', 'rest_framework', 'corsheaders', + 'accounts', 'mosquito', 'smart', ] @@ -114,6 +115,7 @@ AUTH_PASSWORD_VALIDATORS = [ }, ] +AUTH_USER_MODEL = 'accounts.User' # Internationalization # https://docs.djangoproject.com/en/2.0/topics/i18n/ @@ -138,7 +140,7 @@ STATIC_URL = '/static/' REST_FRAMEWORK = { 'DEFAULT_RENDERER_CLASSES': ( 'rest_framework.renderers.JSONRenderer', - 'rest_framework.renderers.BrowsableAPIRenderer', + # 'rest_framework.renderers.BrowsableAPIRenderer', ), # 'DEFAULT_PARSER_CLASSES': ( # 'rest_framework.parsers.JSONParser',