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

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'),
]
http://www.xdnf.cn/news/1635.html

相关文章:

  • R/G-B/G色温坐标系下对横纵坐标取对数的优势
  • Java中的阻塞队列有界和无界区别
  • Langchain检索YouTube字幕
  • Axure复选框组件的深度定制:实现自定义大小、颜色与全选功能
  • react-09React生命周期
  • 解析塔能科技:绿色低碳智慧节能一站式破局之匙
  • 极狐GitLab 如何从 CSV 导入议题?
  • 实时步数统计系统 kafka + spark +redis
  • 4.1 融合架构设计:LLM与Agent的协同工作模型
  • 遨游三防|30200mAh、双露营灯三防平板,见证堆料天花板
  • 多语言笔记系列:使用用户输入
  • Python爬虫爬取图片并存储到MongoDB(注意:仅尝试存储一条空的示例数据到MongoDB,验证MongoDB的联通性)
  • 220V转18V600mA非隔离芯片WT5110
  • 【防火墙 pfsense】1简介
  • Freerots----任务通知
  • Qt本地化 - installTranslator不生效
  • Atlas 800I A2 离线部署 DeepSeek-R1-Distill-Llama-70B
  • 2025年土建施工员考试题库及答案
  • Control Center安卓版:自定义控制中心,提升手机操作体验
  • PostgreSQL 分区表——范围分区SQL实践
  • 【金仓数据库征文】——金仓数据库:国产数据库的卓越之选
  • Docker-高级使用
  • 反射,枚举,lambda表达式
  • 网页版 deepseek 对话问答内容导出为 PDF 文件和 Word 文件的浏览器插件下载安装和使用说明
  • 【axios取消请求】如何在token过期后取消未响应的请求
  • 针对密码学的 EM 侧信道攻击
  • git 操作
  • Golang编程拒绝类型不安全
  • 嵌入式人工智能应用-第三章 opencv操作8 图像特征之 Haar 特征
  • springboot整合redis实现缓存