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.pymodels.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文件

python 复制代码
# 该工具用于匹配数据库中的数据
# 导入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文件实现获得数据库数据

python 复制代码
# 导入 编写好的模型文件
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地址

python 复制代码
from django.urls import path
from system import views

urlpatterns = [
    path('slider/list', views.slider_list, name='slider_list'),
]
相关推荐
GeekABC1 小时前
FastAPI系列06:FastAPI响应(Response)
开发语言·python·fastapi·web
fen_fen1 小时前
Python3:Jupyter Notebook 安装和配置
ide·python·jupyter
why1512 小时前
腾讯(QQ浏览器)后端开发
开发语言·后端·golang
浪裡遊2 小时前
跨域问题(Cross-Origin Problem)
linux·前端·vue.js·后端·https·sprint
float_六七2 小时前
Python语言基础知识详解:分支结构控制语句
python
声声codeGrandMaster2 小时前
django之优化分页功能(利用参数共存及封装来实现)
数据库·后端·python·django
Johny_Zhao3 小时前
OpenStack 全套搭建部署指南(基于 Kolla-Ansible)
linux·python·信息安全·云计算·openstack·shell·yum源·系统运维
27669582923 小时前
海关 瑞数 后缀分析 rs
java·python·rs·瑞数·海关·瑞数后缀·后缀生成
呼Lu噜3 小时前
WPF-遵循MVVM框架创建图表的显示【保姆级】
前端·后端·wpf
bing_1583 小时前
为什么选择 Spring Boot? 它是如何简化单个微服务的创建、配置和部署的?
spring boot·后端·微服务