入门Django项目Day2

130 阅读5分钟

入门Django项目Day2

1.创建数据表

models.py文件主要用一个 Python 类来描述数据表。运用这个类,可以通过简单的 Python 代码来创建、检索、更新、删除 数据库中的记录而无需写一条又一条的SQL语句。今天的例子就是在model.py中创建两个表:产品分类表和产品信息表。

from django.db.models import *

# Create your models here.
## 产品分类表
class GoodsCategory(Model):
    """产品分类"""
    name = CharField(max_length=64, verbose_name='分类名称')
    remark = CharField(max_length=64, null=True, verbose_name='备注', blank=True)

## 产品表
class Goods(Model):
    """产品"""
    # 外键
    category = ForeignKey(GoodsCategory, on_delete=SET_NULL, related_name='goods_set', null=True, verbose_name='产品分类',blank=True, )
    # on_delete 
    number = CharField(max_length=32, verbose_name='产品编号')
    name = CharField(max_length=64, verbose_name='产品名称')
    barcode = CharField(max_length=32, null=True, blank=True, verbose_name='条码')
    spec = CharField(max_length=64, null=True, blank=True, verbose_name='规格')
    shelf_life_days = IntegerField(null=True, verbose_name='保质期天数')
    purchase_price = FloatField(default=0, verbose_name='采购价')
    retail_price = FloatField(default=0, verbose_name='零售价')
    remark = CharField(max_length=128, null=True, blank=True, verbose_name='备注')

"""
下面这些 都是Django-models的常用字段和常用配置 
常用字段:
CharField:用于存储字符串类型,有最大长度限制
IntegerField:用于存储整数类型
FloatField:用于存储浮点数类型
BooleanField:用于存储布尔类型
DateField:用于存储日期类型
DateTimeField:用于存储日期和时间类型
ImageField:用于存储图片类型
FileField:用于存储文件类型
ForeignKey:外键 用于表示数据库表之间的关联关系
OneToOneField:一对一 用于表示一对一的关联关系
ManyToManyField:多对多 用于表示多对多的关联关系
常用配置:
max_length:字段的最大长度限制,可以应用于多种不同的字段类型。
verbose_name:字段的友好名称,便于在管理员后台可视化操作时使用。
default:指定字段的默认值。
null:指定字段是否可以为空。null=True 设置允许该字段为 NULL 值
blank:指定在表单中输入时是否可以为空白。
choices:用于指定字段的可选值枚举列表。
related_name:指定在多对多等关系中反向使用的名称。
on_delete:指定如果外键关联的对象被删除时应该采取什么操作。
"""

相关的不会的函数可以 自己去查询,内容比较简单。

接下来就是合并数据库了。

2.数据库合并

当我们修改数据库相关内容时,我们需要依次记住两条命令:

python manage.py makemigrations#这个命令用于生成迁移脚本 python manage.py migrate#这个命令用于将迁移脚本应用到数据库中 ok,这里的内容也很简单。

3.Django-admin引入admin后台和管理员

首先在终端运行命令创建后台admin管理员,要记住账号信息 python manage.py createsuperuser

然后通过http://127.0.0.1:8000/admin网址登陆admin后台

里面是什么也没有的,还需要我们在admin.py中 注册models.py里面的模型。

from django.contrib import admin
from .models import *
# Register your models here.

# 一定要分开逐个注册,不能放在一起

#在admin站点中注册产品表
admin.site.register(Goods)
admin.site.register(GoodsCategory)

4.外键 && 测试

概念 (自行理解):外键是一种用于建立表之间关联关系的约束,通常指的是一个模型中的一个或多个字段的值必须符合另一个模型中对应字段的值。 我们这里写两个函数实现一下与数据库的交互,然后用postman测试接口。

代码介绍:这段代码展示了使用函数式编程的方式定义了两个视图函数 InsertGoodsCategoryFilterGoodsCategory,这些函数使用了 Django Rest Framework 提供的 @api_view 装饰器来指定支持的 HTTP 方法。

下面是对每个函数的作用的简要说明:

  1. InsertGoodsCategory(request):

    • 使用 @api_view(['POST', 'GET']) 装饰器指定这个视图函数支持 POST 和 GET 请求。
    • 从请求的数据中获取分类名字。
    • 使用 GoodsCategory.objects.get_or_create(name=category_name) 来获取已存在的分类对象或创建新的分类对象。
    • 如果分类已存在,返回一个包含已存在信息的响应。
    • 如果分类是新创建的,返回一个成功插入分类的响应。
  2. FilterGoodsCategory(request):

    • 使用 @api_view(['POST', 'GET']) 装饰器指定这个视图函数支持 POST 和 GET 请求。
    • 从请求的数据中获取分类名字。
    • 使用 GoodsCategory.objects.filter(name=data) 查询数据库中符合条件的分类对象。
    • 如果查询结果存在,返回一个包含已存在信息的响应。
    • 如果查询结果为空,返回一个包含不存在信息的响应。

这些函数使用了 Django Rest Framework 提供的 Response 类来构建响应,并根据业务逻辑返回相应的数据和状态码。视图函数通过接收请求对象 request 来处理请求,并返回相应的响应对象。

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.
# 包含了页面的业务逻辑,接收浏览器请求,进行处理,返回页面操作相关。
@api_view(['POST','GET'])
def InsertGoodsCategory(request):
    #获取http请求中的名为“分类名字”的数据
    category_name = request.data.get('name')

    #获取分类对象或创建新的分类对象
    category,created = GoodsCategory.objects.get_or_create(name = category_name)

    #判断是否存在分类
    if not created:
        return Response({"status":"已存在","goods_category":category_name},status=200)
    else:
        return Response({"message":f"Successfully inserted categoty'{category_name}'."})


@api_view(['POST','GET'])
def FilterGoodsCategory(request):
    data = request.data.get('name')
    goods = GoodsCategory.objexts.filter(name=data)
    if goods.exists():
        return Response({"status":"已存在","goods_category":data},status=200)
    else:
        return Response({"status": "不存在", "goods_category": data}, status=404)

然后我们在urls.py上添加 路由 :

from django.contrib import admin
from django.urls import path
from apps.firstdjango.views import *

urlpatterns = [
    path('admin/', admin.site.urls),
    path('filtergoodscategory/', FilterGoodsCategory),
    path('insertgoodscategory/', InsertGoodsCategory),
]

我们用命令python manage.py runserver开启项目Django服务, 然后用postman测试filtergoodscategory接口和insertgoodscategory接口

9381f8cabf28fd9e3fd1d6b6f8d5e40.png

这里只测试 了一个接口,接下来的你们自行测试就行了。 ok,今天的任务就到这里。