实践四:数据模型与数据库

实践四:数据模型与数据库
内容概述:本节课我们将引入数据模型(model),通过创建数据模型和数据表,我们就可以将信息存储在数据库中,并将数据库中的信息呈现在页面上。
1. 在完成实践一、实践二、实践三的基础上开始本项目,进入激活虚拟环境。
pipenv shell

提示:接下来我们要新建一个名为posts的APP,该APP用于展示公告信息。我们首先要做的就是新建posts应用,并配置好它的template、views和url,让该页面能正常显示(第2-8步骤同实践二、三的home和about应用)

2. 新建一个posts应用

python manage.py startapp posts

3.在my_project/settings.py文件中添加posts应用

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'home', 
    'about',
    'posts',#新增内容
]

4.在templates中添加posts.html文件,打开posts.html文件并添加如下代码:

{% extends 'base.html' %}
{% block content %}
<h1>信息公告页面</h1>
{% endblock content %}

5.更新posts/views.py文件,代码如下:

# posts/views.py
from django.views.generic import TemplateView

class PostsPageView(TemplateView):
    template_name='posts.html'

6.更新my_project和posts中的urls.py文件

(1)在posts中添加urls.py文件,并添加如下代码:

from django.urls import path
from . import views
urlpatterns = [
    path('',views.PostsPageView.as_view(),name='posts'),
]

(2)更新my_project/urls.py文件,代码如下:

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

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('home.urls')) ,
    path('about/', include('about.urls')) ,
    path('posts/', include('posts.urls'))#新加代码
]

7.更新base.html文件,将posts应用的超链接也放进导航页面

    <!-- 页眉的导航栏将会被子模板继承 -->
    <nav class="navbar navbar-expand-sm bg-light">   
        <div class="container-fluid">
            <ul class="navbar-nav">
                <li class="nav-item">
                    <a class="nav-link" href="{% url 'home' %}">主页</a>
                </li>
                <!-- 新加内容 -->
                <li class="nav-item">
                    <a class="nav-link" href="{% url 'posts' %}">信息公告</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="{% url 'about' %}">关于我们</a>
                </li>
            </ul>
        </div>
    </nav>

8.运行服务器,点击“信息公开”超链,你将看到:

python manage.py runserver

 提示:现在我们已经把urls和templates配置好了,接下来我们将加入数据库

9.打开posts/models.py文件,并添加如下代码:

from django.db import models
# Create your models here. class Post(models.Model): text = models.TextField()

解释:这里我们新建了一个数据库模型Post,它只包含一个字段text,text的类型为TextField()。Django的其他模型类型和字段列表请参考链接:Django模型数据类型和字段列表

10. 创建数据库迁移文件

python manage.py makemigrations

当执行该语句后,项目中的“migrations”文件夹会自动生成名为“0001_initial.py”的python文件。这个文件中包含初始的数据模型信息。

结果如下:

11. 创建或更新数据表(根据上一步骤生成的迁移文件)

python manage.py migrate

结果如下:

 12. 创建管理员

在终端输入以下代码创建管理员,有了管理员账号后我们才能登录仅管理页面。

提示:请输入简短的密码,输入密码时终端不会显示你输入的信息,请记牢密码。

python manage.py createsuperuser

 13. 启动本地服务器

python manage.py runserver

14.打开后台管理页面的链接( http://127.0.0.1:8000/admin ),并用刚创建的管理员账号密码登录到后台管理页面。

 15.更新posts/admin.py文件

from django.contrib import admin
from .models import Post
# Register your models here.
admin.site.register(Post)

提示:该操作将Post数据模型注册到管理页面,即让Post表在管理页面上显示出来。再次刷新管理页面,此时Post表已经添加到管理页面了。

16.点击“+Add”按钮,添加一则或或多则公告,并保存。

17.更改公告的名称

此时公告的名称为“Post object(1)”,为了便于后期查询,我们不适用默认的名称。

更新posts/models.py中的代码如下:

from django.db import models

# Create your models here.
class Post(models.Model):
    text = models.TextField()

    def __str__(self):
        return self.text[:50]

再次刷新管理页面,此时显示效果如下:

 提示:接下来我们需要让数据库中的公告信息显示在posts.html页面中

18.更新posts/views.py文件

# posts/views.py
from django.views.generic import ListView #引用ListView视图
from .models import Post

class PostsPageView(ListView):
    model=Post    #添加模型
    template_name='posts.html'

19.更新templates/posts.html文件

{% extends 'base.html' %}
{% block content %}
<h1>信息公告页面</h1>
<ul>
    {% for post in object_list %}
    <li>{{post}}</li>
    {% endfor %}
</ul>
{% endblock content %}

20.刷新信息公告页面,效果如下:

此时,我们已经能从数据库中提取信息并呈现在页面上了,请在管理页面中多添加几条公告,查看效果。

posted @ 2025-03-17 10:20  天净沙秋思  阅读(763)  评论(0)    收藏  举报