本章我们将建立一个简单的新闻模型,实现把新闻保存到数据库中
新建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工具修改模型数据、怎么对数据进行查询等。
评论区