当前位置: 首页 > news >正文

Django创建的应用目录详细解释以及如何操作数据库自动创建表

创建好Django项目后 如果要创建

python manage.py startapp 模块名模块 使用

我创建一个system模块后是

注意:urls是我自己建的文件

1.migrations目录

        存放数据库的迁移文件,当models.py中模型定义发生变化时,通过迁移操作能同步数据库结构变化 __init__ 使该目录成为Python包

2.admin.py

        作用: 用于将模型注册到Django自带的管理后台,能方便对模型数据进行可视化的增删改查操作

        关系:依赖models.py中定义的模型,注册管理后台可操作对应数据模型。

3.app.py

        作用: 定义应用的相关配置类,比如应用名称,标签等信息,可在项目配置中引用。

        关系: 是应用配置相关文件,为应用在项目中的配置和管理提供支持。

4.model.py

        作用: 核心文件之一,用于定义数据库模型类,描述数据库表结构,字段属性,以及表与表之间的关系等。

        关系: 是数据库操作的基础,其他涉及数据操作和展示的文件如views,admin都依赖这里定义模型

5.tests.py

        作用:编写单元测试用例,用于测试应用各个功能模块是否正常工作,保证代码质量和稳定性

        关系:与其他功能文件(如view.py、models.py) 关联,针对这些文件中的功能编写测试.

6.urls.py

        作用:定义应用内的URL路由规则,将不同的URL请求映射到对应的视图函数或类视图,决定如何处理用户请求

        关系:与view.py配合,urls.py 确定URL与视图对应关系,视图处理具体业务逻辑

7.views.py

        作用:处理用户请求,调用models.py中的模型获取数据,进行业务逻辑处理,然后决定返回给用户的内容,可以是函数或类视图

        关系:依赖models.py获取数据,通过urls.py定义的路由请求并返回响应

要想让Django自动创建数据库表 首先点配置settings文件 

就是你创建Django项目时自动生成的

在里面找到

DATABASES = {
    # 'default': {
    #     'ENGINE': 'django.db.backends.sqlite3',
    #     'NAME': BASE_DIR / 'db.sqlite3',
    # }
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '数据库名',
        'USER': '用户名',
        'PASSWORD': '密码',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

配置好后

编写你创建的模块的models.py文件

# 该工具用于匹配数据库中的数据
# 导入django.db的 models核心模块,通过这个模块可以创建各种类型的数据库字段以及定义模型之间的关系
from django.db import models
# Create your models here.# 定义Slider类 继承models.Model 在Django中 所有模型类都必须继承自models.Model 这样Django才能识别他是一个数据库模型,并为其生成相应的数据库表。
class Slider(models.Model):""" 轮播图 """name = models.CharField('名称', max_length=32)desc = models.CharField('描述', max_length=100, null=True, blank=True)types = models.SmallIntegerField('展现的位置', default=10)img = models.ImageField('图片地址', max_length=255, upload_to='%Y%m/slider')reorder = models.SmallIntegerField('排序字段', default=0, help_text="数字越大越靠前")start_time = models.DateTimeField('生效开始时间', null=True, blank=True)end_time = models.DateTimeField('生效结束的时间', null=True, blank=True)target_url = models.CharField('跳转的地址', max_length=255, null=True, blank=True)is_valid = models.BooleanField('是否有效', default=True)created_at = models.DateTimeField('创建时间', auto_now_add=True)updated_at = models.DateTimeField('修改时间', auto_now=True)class Meta:db_table = 'system_slider'ordering = ['-reorder']#  内部类 Meta: 是定义的模型元数据
# db_table 指定改模型在数据库中的对应表名
# ordering 执行改模型在查询时的排序方式

之后需要在setting.py 文件中配置

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'system.apps.SystemConfig',
]

installed_apps 列表用于告诉Django项目哪些应用被安装使用,添加应用到这里,Django才会对其进行管理,包括加载应用中的模型,配置等

接下来可以通过

python manage.py check 进行检查是否有问题

这样就是没有问题 

然后通过

python.manage.py makemigrations

这个命令 主要作用根据你在项目中对模型models.py文件中定义的 所做的修改 生成对应的数据库迁移文件,在Django中 ,数据库迁移文件是记录模型变化的文件,这些文件位于migrations 目录下

最后 通过

 python .lmanage.py migrate 生成数据库表

主要作用就是通过之前生成的迁移文件 应用到数据库中,从而实现数据库结构的更新 使其与项目中定义的模型报错一致

以上操作之后 数据库表就建立ok了!

编写view文件实现获得数据库数据

# 导入 编写好的模型文件
from system.models import Slider
# 导入http
from django import http# 定义方法 获得有效的列表数据
def slider_list(request):# 构建相应的数据结构data = {'meta':{},'objects':[]
}# 通过模型获得数据queryset = Slider.objects.filter(is_valid=True)# 遍历结果集合for item in queryset:data['objects'].append({'id':item.id,......
}) # 返回数据return http.JsonResponse(data)

# 解释
# meta 可以存放一些关于数据的元信息,比如数据总数,页码等
# objects 用于存放数据库中获取并处理后的数据
# 使用Slider模型中的objects管理器的filter方法从数据库中查询数据,filter方法接收关键字作为参数
# is_valid=True 表示筛选出is_valid为True的记录,返回符合条件的集合
# 返回 使用JsonResponse 将整理好的data字典以JSON格式返回给客户端,能够设置合适的响应头

最后配置 urls地址

from django.urls import path
from system import viewsurlpatterns = [path('slider/list', views.slider_list, name='slider_list'),
]

相关文章:

  • JavaScript 中的尾递归:优点与应用场景
  • Trae+DeepSeek学习Python开发MVC框架程序笔记(四):使用sqlite验收用户名和密码
  • VIC-3D非接触全场应变测量系统用于小尺寸测量之电子元器件篇—研索仪器DIC数字图像相关技术
  • containerd 配置代理
  • 如何在 Dialog 中安全初始化 ECharts 并自动监听容器大小变化
  • 优选算法第十讲:字符串
  • Axure疑难杂症:母版菜单设置打开链接后菜单选中效果
  • 【专题刷题】二分查找(一):深度解刨二分思想和二分模板
  • 从机械应答到智能对话:大模型为呼叫注入智慧新动能
  • 济南国网数字化培训班学习笔记-第二组-4节-输电线路工程安全管理
  • 服务器部署LLaMAFactory进行LoRA微调
  • 矩阵系统源码搭建账号分组功能开发全流程解析,支持OEM
  • 【Python笔记 04】输入函数、转义字符
  • Linux系统之----进程优先级、调度与切换
  • 自然语言处理(NLP)——语言转换
  • WebAssembly:开启高性能Web应用新时代
  • 高性能服务器配置经验指南3——安装服务器可能遇到的问题及解决方法
  • C#基于Sunnyui框架和MVC模式实现用户登录管理
  • 棋盘格角点检测顺序问题
  • 几种查看PyTorch、cuda 和 Python 版本方法
  • 山西10岁男孩遭生母和继父殴打遇害,案件庭审延期
  • 期待会师!神二十与空间站完成对接
  • 孙燕姿演唱会本周末开唱,小票根如何在上海释放大活力
  • 法治日报:强制统一店铺广告牌匾事件何以频发?
  • 夜读丨一条鱼的使命
  • 灰鹦鹉爆粗口三年未改?云南野生动物园:在持续引导