(三)Django2——模型与站点

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013967628/article/details/82956433

数据库配置

打开 mysite/settings.py 。这是个包含了 Django 项目设置的 Python 模块。

通常,这个配置文件使用 SQLite 作为默认数据库。本篇文章将利用MySQL作为示例。

修改mysite/settings.py配置文件数据库设置模块

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'blog',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

在这里顺便更改一下市区设置与语言

LANGUAGE_CODE = 'zh-Hans'

TIME_ZONE = 'Asia/Shanghai'

修改mysite/_init_.py,添加如下代码

import pymysql
pymysql.install_as_MySQLdb()

此外,关注一下文件头部的 INSTALLED_APPS 设置项。这里包括了会在你项目中启用的所有 Django 应用。应用能在多个项目中使用,你也可以打包并且发布应用,让别人使用它们。

通常, INSTALLED_APPS 默认包括了以下 Django 的自带应用:

  • django.contrib.admin -- 管理员站点, 你很快就会使用它。
  • django.contrib.auth -- 认证授权系统。
  • django.contrib.contenttypes -- 内容类型框架。
  • django.contrib.sessions -- 会话框架。
  • django.contrib.messages -- 消息框架。
  • django.contrib.staticfiles -- 管理静态文件的框架。

这些应用被默认启用是为了给常规项目提供方便。

默认开启的某些应用需要至少一个数据表,所以,在使用他们之前需要在数据库中创建一些表。请执行以下命令:

python manage.py migrate

这个 migrate 命令检查 INSTALLED_APPS 设置,为其中的每个应用创建需要的数据表,至于具体会创建什么,这取决于你的 mysite/settings.py 设置文件和每个应用的数据库迁移文件(我们稍后会介绍这个)。
就像之前说的,为了方便大多数项目,我们默认激活了一些应用,但并不是每个人都需要它们。如果你不需要某个或某些应用,你可以在运行 migrate 前毫无顾虑地从 INSTALLED_APPS 里注释或者删除掉它们。 migrate 命令只会为在 INSTALLED_APPS 里声明了的应用进行数据库迁移。

创建模型

截下来创建我们自己应用的模型,模型是真实数据的简单明确的描述。它包含了储存的数据所必要的字段和行为。模型是真实数据的简单明确的描述。它包含了储存的数据所必要的字段和行为。

按照下面的例子来编辑 blog/models.py 文件:按照下面的例子来编辑 blog/models.py 文件:

from django.db import models


#分类
class Sorts(models.Model):
    sort_name = models.CharField(max_length = 50,null = False)#分类名称
    sort_description=  models.CharField(max_length = 100)#分类描述
    sort_date = models.DateField(auto_now_add=True)#发表日期
    
    def __str__(self):
        return self.sort_name
#博文
class Articles(models.Model):
    art_title = models.CharField(max_length = 50,null = False)#标题
    art_content = models.TextField(null = False)#内容
    art_views = models.IntegerField(default=0)#浏览量
    art_comment_count = models.IntegerField(default=0)#评论数
    art_date = models.DateField(auto_now_add=True)#发表日期
    art_like_count = models.IntegerField(default=0)#点赞数
    art_sort = models.ForeignKey(Sorts,on_delete=models.CASCADE)#分类

    def __str__(self):
        return self.art_title

代码非常直白。每个模型被表示为 django.db.models.Model 类的子类。每个模型有一些类变量,它们都表示模型里的一个数据库字段。

每个字段都是 Field 类的实例 - 比如,字符字段被表示为 CharField ,日期时间字段被表示为 DateTimeField 。这将告诉 Django 每个字段要处理的数据类型。

每个 Field 类实例变量的名字也是字段名,所以最好使用对机器友好的格式。你将会在 Python 代码里使用它们,而数据库会将它们作为列名。

你可以使用可选的选项来为 Field 定义一个人类可读的名字。这个功能在很多 Django 内部组成部分中都被使用了,而且作为文档的一部分。如果某个字段没有提供此名称,Django 将会使用对机器友好的名称,也就是变量名。在上面的例子中,我们只为 Question.pub_date 定义了对人类友好的名字。对于模型内的其它字段,它们的机器友好名也会被作为人类友好名使用。

定义某些 Field 类实例需要参数。例如 CharField 需要一个 max_length 参数。这个参数的用处不止于用来定义数据库结构,也用于验证数据,我们稍后将会看到这方面的内容。

注意在最后,我们使用 ForeignKey 定义了一个关系。这将告诉 Django,每个 Articles对象都关联到一个 Sorts对象。Django 支持所有常用的数据库关系:多对一、多对多和一对一。

激活模型

上面的一小段用于创建模型的代码给了 Django 很多信息,通过这些信息,Django 可以:

为这个应用创建数据库 schema(生成 CREATE TABLE 语句)。
创建可以与 Articles 和 Sorts 对象进行交互的 Python 数据库 API。
但是首先得把 blog 应用安装到我们的项目里。

为了在我们的工程中包含这个应用,我们需要在配置类 INSTALLED_APPS中添加设置。

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

现在Django项目包含这个blog应用了

python manage.py makemigrations polls

然后再运行

python manage.py migrate

将会根据上面创建的两个class创建对应的数据库表

出示API

现在让我们进入交互式 Python 命令行,尝试一下 Django 为你创建的各种 API。通过以下命令打开 Python 命令行:

python manage.py shell

我们使用这个命令而不是简单的使用 "Python" 是因为 manage.py 会设置 DJANGO_SETTINGS_MODULE 环境变量,这个变量会让 Django 根据 mysite/settings.py 文件来设置 Python 包的导入路径。

当你成功进入命令行后,来试试 database API 吧:

from blog.models import Sorts, Articles  # Import the model classes we just wrote.
Articles.objects.all()

上述首先导入包,然后查询所有Article表数据,更多API不再一一举例

介绍 Django 管理页面


为你的员工或客户生成一个用户添加,修改和删除内容的后台是一项缺乏创造性和乏味的工作。因此,Django 全自动地根据模型创建后台界面。

Django 产生于一个公众页面和内容发布者页面完全分离的新闻类站点的开发过程中。站点管理人员使用管理系统来添加新闻、事件和体育时讯等,这些添加的内容被显示在公众页面上。Django 通过为站点管理人员创建统一的内容编辑界面解决了这个问题。管理界面不是为了网站的访问者,而是为管理者准备的。

首先,我们得创建一个能登录管理页面的用户。请运行下面的命令:

python manage.py createsuperuser

然后按照提示填写用户名,密码、邮箱等。

Django 的管理界面默认就是启用的。让我们启动开发服务器,看看它到底是什么样的。

如果开发服务器未启动,用以下命令启动它:

python manage.py runserver

现在,打开浏览器,转到你本地域名的 "/admin/" 目录, -- 比如 "http://127.0.0.1:8000/admin/" 。你应该会看见管理员登录界面

然后输入刚才创建账号密码登陆。

你将会看到几种可编辑的内容:组和用户。它们是由 django.contrib.auth 提供的,这是 Django 开发的认证框架。

向管理页面中添加博客应用

但是我们的博客应用在哪呢?它没在索引页面里显示。

只需要做一件事:我们得告诉管理页面,打开 blog/admin.py文件,把它编辑成下面这样:

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

admin.site.register(Articles)
admin.site.register(Sorts)

现在我们向管理页面注册了问题 Articles类与Sorts类。Django 知道它应该被显示在索引页里,接下来便可通过管理页面进行数据管理。

猜你喜欢

转载自blog.csdn.net/u013967628/article/details/82956433