# d_musiclist **Repository Path**: windstarry/d_musiclist ## Basic Information - **Project Name**: d_musiclist - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-11-16 - **Last Updated**: 2023-11-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 使用django-ninja+Vue前后端分离项目开发的前后端分离项目 参考项目网址:https://github.com/poplangfan/MyProject/tree/main/music ## 一、配置django项目 - 创建项目文件夹 ```shell mkdir music_list cd music_list ``` - 初始化django项目 ```shell django-admin startproject backend ``` - 创建虚拟环境 ```shell cd backend python -m venv venv ``` - 在虚拟环境中安装相关依赖 ```shell venv\scripts\activate.ps1 pip install django django-ninja ``` ## 二、配置django-ninja django常用的命令行 ```shell # 创建项目 django-admin startproject # 创建应用 python manage.py startapp # 启动django项目 python manage.py runserver # 收集静态文件 python manage.py collectstatic # 数据库迁移 python manage.py makemigrations python manage.py migrate # 创建超级用户 python manage.py createsuperuser # 创建指定用户名的超级用户 python manage.py createsuperuser --username # 初始化数据 python manage.py ``` ### 1、创建music应用 ```shell python manage.py startapp music ``` - 将music应用添加到django项目设置中 backend/settings.py ```python INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # 增加应用 'music', ] ``` - 创建数据模型 music/models.py ```python from django.db import models # Create your models here. class Music(models.Model): title = models.CharField(max_length=250) artist = models.CharField(max_length=250) duration = models.FloatField() last_play = models.DateTimeField() ``` - 生成数据表 1. 检测你对模型文件的修改,并且把修改的部分储存为一次迁移 ```shell python manage.py makemigrations ``` 2. 数据库里创建新定义的模型的数据表 ```shell python manage.py migrate ``` - 批量创建模拟数据 1. 创建一份原始数据 2. 在music应用下面创建management/commands目录 3. 创建生成数据的脚本 music/management/commands/music_init.py ```python import json import os import django from datetime import datetime from django.core.management.base import BaseCommand from django.utils.timezone import make_aware from django.db import connection from backend.settings import BASE_DIR from music.models import Music os.environ.setdefault("DJANGO_SETTINGS_MODULE", "application.settings") django.setup() def main(): # 打开音乐数据文件,并加载为json格式 with open( os.path.join(BASE_DIR, "utils", "musicdata.json"), "r", encoding="utf-8" ) as load_f: musics = json.load(load_f) # 将JSON字符串转换为带时区的日期时间对象 DATE_FMT = "%Y-%m-%d %H:%M:%S" for track in musics: # 将最后一次播放日期时间字符串转换为datetime对象,并设置时区意识 track_date = datetime.strptime(track["last_play"], DATE_FMT) track["last_play"] = make_aware(track_date) # 如果数据库中没有音乐对象,则批量创建 if Music.objects.count() == 0: Music.objects.bulk_create([Music(**ele) for ele in musics]) else: # 如果已经有音乐对象,则更新或创建新的对象 for ele in musics: # 删除音乐对象中的id字段 id = ele.pop("id") # 更新或创建音乐对象 Music.objects.update_or_create(id=id, defaults=ele) class Command(BaseCommand): """ 项目初始化命令: python manage.py music_init """ def add_arguments(self, parser): pass def handle(self, *args, **kwargs): """ 初始化music数据 :param args: 位置参数 :param kwargs: 关键字参数 """ print(f"正在准备初始化music数据...") if hasattr(connection, "tenant") and connection.tenant.schema_name: from django_tenants.utils import get_tenant_model from django_tenants.utils import tenant_context, schema_context for tenant in get_tenant_model().objects.exclude(schema_name="public"): with tenant_context(tenant): print(f"租户[{connection.tenant.schema_name}]初始化数据开始...") main() print(f"租户[{connection.tenant.schema_name}]初始化数据完成!") else: main() print("music数据初始化完成") ``` 4. 运行脚本程序 ```shell python manage.py music_init ``` ### 2、创建system应用 ```shell python manage.py startapp system ``` - 将system应用添加到django项目设置中 backend/settings.py ```python INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # 增加应用 'music', 'system', ] ```