侧边栏壁纸
博主头像
进一步,海阔天空 博主等级

进一步,海阔天空

  • 累计撰写 150 篇文章
  • 累计创建 20 个标签
  • 累计收到 7 条评论

目 录CONTENT

文章目录

Django Web开发系列教程【4】- 建立模型(Model)

海阔天空
2023-05-08 / 0 评论 / 0 点赞 / 79 阅读 / 0 字

本章我们将建立一个简单的新闻模型,实现把新闻保存到数据库中

新建APP

上文中,我们已经提过,一个Django项目可以包含多个应用,以便于代码进行隔离管理,现在我们创建一个APP,并在这个app里面完成我们的新闻管理操作。新建应用的过程如下:

通过以下命令新建一个app

python manage.py startapp api433

运行该命令后,项目根目录下会多出一个api433目录,内容如下:

把应用添加到主项目中去

# /wx433_webapi2/wx433_webapi2/setting.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api433/', include('api433.urls'))
]

接着我们在api433目录添加views.py文件,内容如下:

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.

# 读取新闻列表
def newsList(request):
    return HttpResponse("newsList")

然后在api433目录添加urls.py文件,内容如下:

from django.urls import path
from . import views

# namespace
app_name = "api433"

urlpatterns = [
    path('news_list', views.newsList, name="news list")
]

运行项目,然后访问http://127.0.0.1:8000/api433/news_list即可调用新闻列表api了

这样一个MVT模型就实现了,非常简单是吧?

定义模型(Model)

这里我们以一个新闻表为例,来说明如何定义一个新闻模型。

Model (模型) 即数据模型,是一个Django应用的核心。模型不是数据本身(比如数据表里的数据), 而是抽象的描述数据的构成和逻辑关系。

每个Django的模型(model)实际上是个类,继承自models.Model。每个Model应该包括属性(字段),关系(比如单对单,单对多和多对多)和方法。当你定义好Model模型后,Django的接口会自动帮你在数据库生成相应的数据表(table)。这样你就不用自己用SQL语言创建表格或在数据库里操作创建表格了。

对于Model,我们需要了解以下几个内容

  • Model fields

  • Field options

  • Meta options

  • Model methods

  • Relationships

Model fields

model field可以理解为数据库表中的字段,字段的类型包括

  • AutoField

    这是一个自动生成的字段,它就像一个内建的关键字段,如果我们在创建一个Model类的时候没有设置Primary字段,那么Django会自动帮我们创建这个字段,字段类型为integer,名称为默认为id,如果你不想使用默认的名称,你可以在model类里面添加这样的字段定义:

    my_primary_key=models.AutoField(primary_key=True)

    这样字段名称就会从id改为my_primary_key了。

  • BooleanField

    BooleanField为True/False字段,如这样定义:status=models.BooleanField()

  • CharField

    相当于数据库中的char字段,如果是长文本,可以用TextField字段。

  • DateField

    datetime.date类的实例,用于保存日期,示例:

    date=DateField(auto_now=False,auto_now_add=False,**options)

    如果auto_new设为True,那么当这个对象更新的时候,这个字段的值会自动更新为当前时间。auto_now_add为True,创建对象的时候会该字段的值自动设为当前时间。

  • DateTimeField

  • DecimalField

  • FloatField

  • EmailField

  • FileField

  • ImageField

  • IntegerField

  • SlugField

实现添加新闻功能

models.py中定义News模型,继承自models.Model

from django.db import models


# Create your models here.

# 新闻
# {
#     tgid: "1",
#     img: "https://img.yzcdn.cn/vant/cat.jpeg",
#     title: "闹元宵佳节扬传统文化——新升幼儿园党支部元宵节系列庆祝活动",
#     txt: "闹元宵佳节扬传统文化——新升幼儿园党支部元宵节系列庆祝活动",
#     dttime: "2021-02-25",
# }

class News(models.Model):
    tgid = models.IntegerField(verbose_name='id号', name='id', primary_key=True, auto_created=True)
    title = models.CharField(verbose_name="新闻图片路径", max_length=1000)
    img = models.CharField(verbose_name="新闻图片路径", max_length=1000)
    txt = models.TextField(verbose_name='新闻内容')
    dttime = models.DateField(verbose_name='添加时间', auto_now_add=True)

forms.py中定义一个NewsForm表单类

from .models import News
from django import forms

class NewsForm(forms.ModelForm):
    class Meta:
        model = News
        fields = "__all__"

views.py实现模型与Template的关联

from django.urls import reverse
from django.http import HttpResponse
from .forms import NewsForm


# Create your views here.

# 读取新闻列表
def newsList(request):
    return HttpResponse("newsList")
# 添加新闻
def news_add(request):
    # 如果用户通过POST提交,通过request.POST获取提交数据
    if request.method == "POST":
        # 将用户提交数据与NewsForm表单绑定
        form = NewsForm(request.POST)
        # 表单验证,如果表单有效,将数据存入数据库
        if form.is_valid():
            form.save()
            # 跳转到新闻列表
            return redirect(reverse("api433:news_list"))
    else:
        # 否则空表单
        form = NewsForm()
    return render(request, "news/add_news.html", {"form": form})

urls.py中设置访问路径

from django.urls import path
from . import views

app_name = "api433"

urlpatterns = [
    path('news_list', views.newsList, name="news list"),
    path('add_news', views.news_add, name="add news")

templates/news/add_news.html定义界面模版

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>添加新闻</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    <div>
        <button type="submit">提交</button>
    </div>
</form>
</body>
</html>

这一切都做好之后,运行以下命令创建数据库表,并启动服务

python manage.py makemigrations
python manage.py migrate
python manage.py runserver

访问http://127.0.0.1:8000/api433/add_news即可实现添加新闻的操作了

OK,本章的内容就先到此结束,后面我们会详细的讲解怎么通过admin工具修改模型数据、怎么对数据进行查询等。

0

评论区