後臺主頁輪播圖介面並引入simpleui
阿新 • • 發佈:2022-04-21
utils/model.py/BaseModel
存放公共欄位的
from django.db import models # 5個公共欄位 class BaseModel(models.Model): created_time = models.DateTimeField(auto_now_add=True, verbose_name='建立時間') updated_time = models.DateTimeField(auto_now=True, verbose_name='最後更新時間') is_delete = models.BooleanField(default=False, verbose_name='是否刪除') is_show = models.BooleanField(default=True, verbose_name='是否上架') orders = models.IntegerField(verbose_name='優先順序') class Meta: abstract = True # 表示它是虛擬的,不在資料庫中生成表,它只用來做繼承
Banner表
前提先建立home這個app
from django.db import models # Create your models here. # 輪播圖介面---》輪播圖表from utils.model import BaseModel class Banner(BaseModel): # 順序,插入時間, 是否顯示,是否刪除。。。----》後期寫課程的表也會用到這些欄位--->仿AbstractUser,寫一個基表,以後繼承這個表 # 繼承過來,只需要寫自有欄位即可:title,image,info,link title = models.CharField(max_length=16, unique=True, verbose_name='名稱') image = models.ImageField(upload_to='banner', verbose_name='圖片') link = models.CharField(max_length=64, verbose_name='跳轉連結') # 在前端點選圖片,會跳轉到某個地址 info = models.TextField(verbose_name='詳情') # 也可以用詳情表,寬高出處 class Meta: db_table = 'luffy_banner' verbose_name_plural = '輪播圖表' def __str__(self): return self.title
遷移資料
app要註冊
# python manage.py makemigrations ---》如果沒有變化,是app沒註冊 # python manage.py migrate
建立超級使用者
# python manage.py createsuperuser --->建立個使用者
引入
pip install django-simpleui
註冊app
INSTALLED_APPS = [ 'simpleui', ... ]
在admin中寫
from django.contrib import admin from .models import Banner @admin.register(Banner) class BannerAdmin(admin.ModelAdmin): list_display = ('id', 'title', 'link','is_show', 'is_delete') # 增加自定義按鈕 actions = ['make_copy'] def make_copy(self, request, queryset): # 選中一些資料,點選 【自定義按鈕】 觸發方法執行,傳入你選中 queryset # 儲存,刪除 print(queryset) make_copy.short_description = '自定義按鈕'
輪播圖介面
想要返回的資料格式
{code:100,msg:成功,result:[{img:地址,link:跳轉地址,orders:順序,title:名字},{img:地址,link:跳轉地址,orders:順序,title:名字}]}
home路由
from django.urls import path, include from rest_framework.routers import SimpleRouter from .views import BannerView router = SimpleRouter() router.register('banner', BannerView, 'banner') urlpatterns = [ path('', include(router.urls)), ]
檢視類
from .models import Banner from .serializer import BannerSerializer from utils.response import APIResponse from rest_framework.viewsets import GenericViewSet from rest_framework.mixins import ListModelMixin class BannerView(GenericViewSet,ListModelMixin): # 獲取所有介面-list,自動生成路由 queryset = Banner.objects.filter(is_delete=False,is_show=True).order_by('orders') serializer_class =BannerSerializer def list(self, request, *args, **kwargs): # 重寫list res=super().list(request, *args, **kwargs) return APIResponse(result=res.data)
序列化類
from rest_framework import serializers from .models import Banner class BannerSerializer(serializers.ModelSerializer): class Meta: model = Banner fields = ['title', 'image', 'link', 'orders']
總路由
urlpatterns = [ path('admin/', admin.site.urls), path('api/v1/home/', include('home.urls')), # http://127.0.0.1:8000/api/v1/home/banner/ ]