一、后台主页模块设计
# 首页需要写的接口分析
"""
1、轮播图接口 (以它为例)
2、六个推荐课程接口
3、老师接口
"""
# 首先需要建一个首页app,我们命名为home
# 我们在终端里进入apps文件夹,然后输入下面命令
python ../../manage.py startapp home
# 轮播图接口
-轮播图表---》运营从后台把图片上传
-图片名称,图片地址,跳转链接,描述
-上传日期,更新日期,图片排序,是否删除(软删除),是否展示
-迁移(把app注册)
-查询所有轮播图接口
# 配置开启,media
# 移动端,开启app,广告功能
-img:真正的图片
-link_type:self/outer
-link: http://www.baidu.com / Home
后台录入功能:
-录入接口
1、创建基表
这个表很多地方都可以使用,可以放在utils下,新创建一个model.py,方便导入使用
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 # 表示只用来继承,不在数据库生成
2、home应用下的Banner表
创建一个home的应用,在home下的models.py里写
# 导入utils里的BaseModel表
from luffy_api.utils.model import BaseModel
class Banner(BaseModel): # 继承BaseModel表
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
\'\'\'
我们的Banner表继承我们上面写的基表BaseModel表,
写完之后,我们就去dev配置里 注册home,
然后迁移表(记得退到 大luffy_api里迁移)
python manage.py makemigrations
python manage.py migrate
\'\'\'
3、写查询所有图片接口
数据库的表写完之后,我们就应该提供对应的接口来给前端查询。所以接下来的步骤就是写序列化类、写视图类,然后将视图类配置给路由
# 1.写序列化类(在home里新建一个serializer.py)
from rest_framework import serializers
from home import models
class BannerSerializer(serializers.ModelSerializer):
class Meta:
model = models.Banner
fields = [\'title\',\'link\',\'image\']
# 2.写视图类
from rest_framework.generics import ListAPIView
from rest_framework.viewsets import ViewSetMixin
from . import models
from . import serializer
# django配置文件,优先使用项目的配置文件,如果没有,再去使用django内置的
from django.conf import settings
class BannerView(ViewSetMixin, ListAPIView):
queryset = models.Banner.objects.all().filter(is_delete=False, is_show=True).order_by(\'orders\')[:settings.BANNER_COUNT]
serializer_class = serializer.BannerSerializer
# 3.配置路径(路由分发)
# 总路由
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path(\'admin/\', admin.site.urls),
path(\'api/v1/home/\', include(\'home.urls\')),
]
# home的app下新建urls.py
from home import views
from rest_framework.routers import SimpleRouter
router = SimpleRouter()
router.register(\'banner\', views.BannerView, \'banner\')
urlpatterns = [
]
urlpatterns += router.urls
4、自定义配置文件
"""
我们可以把自定义的配置放在项目的配置文件dev.py里,但是这样不好,
因为dev.py是项目测试的时候用的,上线时使用的是名为pro.py的配置文件,
这样一来上线就又要修改,所以我们可以在setting文件夹下新建一个user_setting.py
"""
# 在user_setting.py里写
BANNER_COUNT = 4 # 轮播图显示的条数
# 在dev.py配置文件中导入user_setting.py里的全部代码
from .user_setting import *
5、开启media访问
为了让图片显示在前端,必须开启media文件的访问
# 在dev.py配置文件中
# 开启media路径
MEDIA_ROOT = os.path.join(BASE_DIR, \'media\') # 开启的路径
MEDIA_URL = \'/media/\' # 访问的路径
# 直接在总路由中配置
from django.views.static import serve
from django.conf import settings # 导入配置文件
# 配置开启media
path(\'media/<path:path>\', serve, {\'document_root\': settings.MEDIA_ROOT}),
"""
配置是固定的写法,但最后的settings.MEDIA_ROOT是代表配置文件中media的路径。
这句话的解释是media/<path:path>解析出来,然后去MEDIA_ROOT寻找相应的文件
"""
# 上传的文件,upload_to,传到media文件夹下
# 访问文件:http://127.0.0.1:8000/media/xx/xx.p
二、simple-ui后台管理
Simple UI是Django admin的一个美化主题,是一个基于element-ui+vue开发。
下载命令为:pip3 install django-simpleui
# 我们的网站需要分为主站和后台
-主站:给互联网用户看
-后台管理:给公司内部人员看,如运营,领导等
# 我们的后台可以集成simple-ui,直接在dev.py文件里添加simpleui,示例如下
INSTALLED_APPS = [
\'simpleui\',
...
]
# 然后我们使用终端的命令创建一个超级用户,填入用户名和密码(poco,poco123)
python manage.py createsuperuser
# 然后我们就可以登录上django的admin后台,输入我们刚刚创建的超级用户
# admin后台没有显示Home的轮播图表,是因为我们没有注册
# 我们需要去home应用下的admin.py文件下输入下列代码进行注册
from . import models
admin.site.register(models.Banner)
# 注册完毕,就可以通过鼠标手动录入数据了录入数据