目录
一、创建home模块
前提:在 luffy 虚拟环境下
1.终端从项目根目录进入apps目录
>: cd luffyapi & cd apps
2.创建app
>: python ../../manage.py startapp home
注册home模块:dev.py
INSTALLED_APPS = [
# ...
'rest_framework',
'home',
]
二、Banner数据表model设计
- 写一个基表BaseModel
- 写轮播图表
- 数据迁移
utils/common_models.py
### 基表:BaseModel##########
# 可以模仿这个类来写,django.contrib.auth.models.AbstractUser
from django.db import models
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 # 这个表模型只用来继承,不用来在数据库中生成表
apps/home/models.py
########Banner########
from django.db import models
from utils.common_models import BaseModel
class Banner(BaseModel):
# 分析字段:id img图片地址 长传时间 是否删除 是否显示 order
# 把公共字段抽取到某个基表中,以后要使用,直接继承基表,扩写自己的字段就可以了---> 用过的AbstractUser就是这个原理
title = models.CharField(max_length=16, unique=True, verbose_name='名称')
image = models.ImageField(upload_to='banner', verbose_name='图片')
# 点击图片,调整到的路径
# 前端跳转的地址: 可能是前端路由 或者是完整的http链接
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
数据迁移:在大luffyapi路径下的终端
>: python manage.py makemigrations
>: python manage.py migrate
# 执行第一条命令后,就会在应用下的migrations包中产生一条迁移记录,记录在py文件中,不会正式的创建表
# 执行第二条命令后,才会真正的创建表,然后在django_migrations中增加一条迁移记录。
三、simpleui后台管理
# 安装
pip install django-simpleui
# 在dev.py的应用中注册
INSTALLED_APPS = [
'simpleui',
...
]
# 创建一个超级用户
python manage.py createsuperuser
Username: admin
Password: lqz12345
# 把自己创建的表Banner注册到后台
# home/admin.py
from django.contrib import admin
from .models import Banner
admin.site.register(Banner)
# 后台中应用名显示中文
# home/apps.py
class HomeConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'home'
verbose_name = '首页功能' # 增加这行后,后台中应用名就显示中文
# 录入数据
# 正常在公司中,网站分主站和后台管理
# 后台管理,主要是运营录入数据,使用simpleui
四、轮播图接口
4.1 封装自己的mixin
- 使用自己封装好的返回格式函数
- utils/common_mixin.py
from rest_framework.mixins import ListModelMixin, CreateModelMixin, RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin
from utils.common_response import APIResponse
class CommonListModelMixin(ListModelMixin):
def list(self, request, *args, **kwargs):
res = super().list(request, *args, **kwargs)
return APIResponse(data=res.data)
class CommonCreateModelMixin(CreateModelMixin):
def create(self, request, *args, **kwargs):
res = super().create(request, *args, **kwargs)
return APIResponse(data=res.data) # {code:100,msg:成功,data:{}}
class CommonRetrieveModelMixin(RetrieveModelMixin):
def retrieve(self, request, *args, **kwargs):
res = super(CommonRetrieveModelMixin, self).retrieve(request, *args, **kwargs)
return APIResponse(data=res.data)
class CommonUpdateModelMixin(UpdateModelMixin):
def update(self, request, *args, **kwargs):
res = super(CommonUpdateModelMixin, self).update(request, *args, **kwargs)
return APIResponse(data=res.data)
class CommonDestroyModelMixin(DestroyModelMixin):
def destroy(self, request, *args, **kwargs):
res = super().destroy(request, *args, **kwargs)
return APIResponse(msg='删除成功')
4.2 轮播图接口
视图 home/views.py
# 查询所有 轮播图接口
from rest_framework.viewsets import GenericViewSet
from utils.common_mixin import CommonListModelMixin as ListModelMixin
from .models import Banner
from .serializer import BannerSerializer
class BannerView(GenericViewSet, ListModelMixin):
# 展示被软删除的,和显示上架的,和根据orders排序
queryset = Banner.objects.all().filter(is_delete=False, is_show=True).order_by('orders')
serializer_class = BannerSerializer
路由 urls.py
## 总路由
urlpatterns = [
path('admin/', admin.site.urls),
path('api/v1/home/', include('home.urls')),
# static 默认开启的,后期咱们会开启media文件夹,除此之外的其它文件夹,尽量不要开放,让外部访问
path('media/<path:path>', serve, {'document_root': settings.MEDIA_ROOT}),
]
分路由 home/urls.py
from .views import BannerView
from rest_framework.routers import SimpleRouter
router = SimpleRouter()
router.register('banner', BannerView, 'banner')
urlpatterns = [
# path('admin/', admin.site.urls),
]
urlpatterns += router.urls
序列化类 home/serializers.py
from rest_framework import serializers
from . import models
class BannerSerializer(serializers.ModelSerializer):
class Meta:
model = models.Banner
# 只返回给前端需要的字段名
fields = ['id', 'image', 'title', 'link']
接口
http://localhost:8000/home/banners/
4.3 自定义配置文件
# 通过配置文件控制显示多少条轮播图
# 使用步骤
1 在settings下新建:common_settings.py
BANNER_COUNT = 3
2 在dev.py中加入
# 导入轮播图设置
from .common_settings import *
3 在轮播图接口上,直接导入使用
class BannerView(GenericViewSet, ListModelMixin):
queryset = Banner.objects.all().filter(is_delete=False, is_show=True).order_by('orders')[:settings.BANNER_COUNT]
serializer_class = BannerSerializer
标签:name,主页,models,py,模块,import,后台,home,class
From: https://www.cnblogs.com/zjyao/p/17512510.html