做网站主要栏目内,dns上国外网站,济南网站建设优化,网站建设招标信息1. Django 构建数据表创建与数据迁移
1.1 数据表创建
1.1.1 模块功能
如前所述#xff0c;models.py文件主要用一个 Python 类来描述数据表。运用这个类,可以通过简单的 Python 代码来创建、检索、更新、删除 数据库中的记录而无需写一条又一条的SQL语句。今天的例子就是在…1. Django 构建数据表创建与数据迁移
1.1 数据表创建
1.1.1 模块功能
如前所述models.py文件主要用一个 Python 类来描述数据表。运用这个类,可以通过简单的 Python 代码来创建、检索、更新、删除 数据库中的记录而无需写一条又一条的SQL语句。今天的例子就是在model.py中创建两个表产品分类表和产品信息表。
1.1.1.1 models.py
产品分类表
class GoodsCategory(Model):name CharField(max_length64, verbose_name名称)remark CharField(max_length256, nullTrue, blankTrue, verbose_name备注)
产品信息表
class Goods(Model):number CharField(max_length32, verbose_name编号)name CharField(max_length64, verbose_name名称)barcode CharField(max_length32, nullTrue, blankTrue, verbose_name条码)category ForeignKey(goods.GoodsCategory, on_deleteSET_NULL, nullTrue,related_namegoods_set, verbose_name产品分类)spec CharField(max_length64, nullTrue, blankTrue, verbose_name规格)shelf_life_days IntegerField(nullTrue, verbose_name保质期天数)purchase_price FloatField(default0, verbose_name采购价)retail_price FloatField(default0, verbose_name零售价)remark CharField(max_length256, nullTrue, blankTrue, verbose_name备注)
1.2 合并数据库
这两个命令是Django框架中的关键命令用于进行数据库迁移。当你修改了Django模型后你需要运行这两个命令以将这些更改应用到数据库中。
python manage.py makemigrations
这个命令用于生成迁移脚本。当你更新了模型文件之后需要运行该命令Django会检测模型的改变然后自动生成相应的迁移脚本存储在migrations/目录下。通常来说你需要针对每个应用运行一次该命令。
python manage.py migrate
这个命令用于将迁移脚本应用到数据库中。当你在模型文件中进行更改之后需要先通过makemigrations命令生成迁移脚本然后运行该命令将这些脚本应用到数据库中。对于新的迁移脚本Django会逐个执行它们从而更新数据库结构。对于已经执行过的脚本Django会跳过它们避免重复执行。
这两个命令是Django框架中非常重要的命令在修改数据库相关内容时必须时刻清醒地记住使用它们。 2. Django-models的常用字段和常用配置
2.1 常用字段
CharField 用于存储字符串类型有最大长度限制
IntegerField 用于存储整数类型
FloatField用于存储浮点数类型
BooleanField 用于存储布尔类型
DateField 用于存储日期类型
DateTimeField 用于存储日期和时间类型
ImageField 用于存储图片类型
FileField 用于存储文件类型
ForeignKey 外键 用于表示数据库表之间的关联关系
OneToOneField 一对一 用于表示一对一的关联关系
ManyToManyField 多对多 用于表示多对多的关联关系
2.2 常用配置
max_length 字段的最大长度限制可以应用于多种不同的字段类型。
verbose_name 字段的友好名称便于在管理员后台可视化操作时使用。
default 指定字段的默认值。
null 指定字段是否可以为空。
nullTrue 设置允许该字段为 NULL 值
blank 指定在表单中输入时是否可以为空白。
choices 用于指定字段的可选值枚举列表,在最上面定义
2.3 字段定义
class DeliveryMaterial(Model):class Status(TextChoices):QUALIFIED (qualified, 良品)
UNQUALIFIED (unqualified, 不良品)status CharField(max_length32, choicesStatus.choices, defaultStatus.QUALIFIED, verbose_name状态)TextChoices 是 Django 3.0 引入的一个枚举类用于在模型字段中创建可选择的、文本值的选项。 related_name 指定在多对多等关系中反向使用的名称。
on_delete 指定如果外键关联的对象被删除时应该采取什么操作。
3. Django-admin 引入admin后台和管理员
3.1 创建管理员
3.1.1 创建后台 admin 管理员
在终端运行命令
python manage.py createsuperuser
登录 admin 后台
http://127.0.0.1:8000/admin
python manage.py runserver 3.2 配置
在admin.py文件中注册你的模型
from django.contrib import admin
from .models import * # 引入产品表# 一定要分开逐个注册不能放在一起admin.site.register(Goods)# 在admin站点中 注册产品表admin.site.register(GoodsCategory) # 在admin站点中 注册产品表
3. 构建数据表外键的使用
3.1 外键
models.py
category ForeignKey(GoodsCategory,on_deleteSET_NULL,related_namegoods_set,nullTrue,verbose_name产品分类)
on_delete 设置当外键对应的数据被删除时的反应 nullTrue
外键的概念
外键是一种用于建立表之间关联关系的约束通常指的是一个模型中的一个或多个字段的值必须符合另一个模型中对应字段的值。
增加数据
苹果 - 水果桃子 - 水果猴子 - 动物大象 - 动物构建根据分类获取某个分类下的产品 API
views.py
from django.shortcuts import render
from rest_framework.response import Response
from .models import *
from rest_framework.decorators import api_view
from django.shortcuts import get_object_or_404
# Create your views here.
# GET
# POST# 函数式编程
api_view([POST, GET])
def InsertGoodsCategory(request):category_name request.data.get(分类名字)# 获取分类对象或创建新的分类对象category, created GoodsCategory.objects.get_or_create(namecategory_name)# 判断是否已存在分类if not created:return Response({status: 已存在, goods_category: category_name}, status200)else:return Response({message: fSuccessfully inserted category {category_name}.})api_view([POST,GET])
def FilterGoodsCategory(request):data request.data.get(分类名字)goods GoodsCategory.objects.filter(namedata)if goods.exists():return Response({status: 已存在, goods_category: data}, status200)else:return Response({status: 不存在 ,goods_category: data}, status404)urls.py
放入路由
from django.contrib import admin
from django.urls import path
from apps.erp_test.views import *urlpatterns [path(admin/, admin.site.urls),path(filtergoodscategory/, FilterGoodsCategory),path(insertgoodscategory/, InsertGoodsCategory),]
使用postman针对insertGoodsCategory/和filtergoodscategory/API接口进行测试测试结果如下