Django学习之路--基础(二)

目录

创建模型

第一、数据库配置

第二、创建模型

激活模型

管理后台

创建一个管理员账号

启动开发服务器

向管理页面中加入投票应用

需要掌握

扫描二维码关注公众号,回复: 14772914 查看本文章

创建模型

  • 第一、数据库配置

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

    通常,这个配置文件使用 SQLite 作为默认数据库。如果你不熟悉数据库,或者只是想尝试下 Django,这是最简单的选择。Python 内置 SQLite,所以你无需安装额外东西来使用它。但是我们在正规的企业的里都不会使用SQLite做数据库,所以我们就要改变配置。连接外部数据库,比如MySQL,在往下的学习中我们都会以mysql作为数据库。

    关于MySQL数据库的配置(其他数据库配置可看django文档编写你的第一个 Django 应用,第 2 部分 | Django 文档 | Django

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'apaclass',
            'USER':'root',
            'PASSWORD':'phh626313',
            'HOST':'127.0.0.1',
            'PORT':'3306'
        }
    }

    改完以后会出现一个报错: 

  • 第二、执行

  • python manage.py migrate 用来做数据库迁移,这里会自动生成相关表(可选项)

  • 发现报错以后不要按照提示下载‘mysqlclient’,因为这是一个比较老的库,所以可以下载pymysql

    pip install pymysql

    然后再全局的mysite __init__.py文件当中写入一下代码,使用mysql,代替全局的mysqlclient

    import pymysql
    pymysql.install_as_MySQLdb()
  •  提示:有的同志在做到这一步还会报错,有一种可能就是在数据库里没有你所修改的配置中的NAME,也就是没有这个数据库,所以要新建与你配置名字相同的数据库。

    所以可以做以下步骤:

    • 第一、建数据库

    • 第二、执行:python manage.py migrate 用来做数据库迁移,这里会自动生成相关表(可选项)

  • 第二、创建模型

    这个简单的投票应用中,需要创建两个模型:问题 Question 和选项 ChoiceQuestion 模型包括问题描述和发布时间。Choice 模型有两个字段,选项描述和当前得票数。每个选项属于一个问题。

    api01\models.py

    from django.db import models
    ​
    class Question(models.Model):
        question_text = models.CharField(max_length=200)
        pub_date = models.DateTimeField('date published')
    ​
    class Choice(models.Model):
        question = models.ForeignKey(Question, on_delete=models.CASCADE)
        choice_text = models.CharField(max_length=200)
        votes = models.IntegerField(default=0)

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

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

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

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

    Field 也能够接收多个可选参数;在上面的例子中:我们将 votesdefault 也就是默认值,设为0。

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

  • 激活模型

    • 为这个应用创建数据库 schema(生成 CREATE TABLE 语句)。

    • 创建可以与 QuestionChoice 对象进行交互的 Python 数据库 API。

    为了在我们的工程中包含这个应用,我们需要在配置类 INSTALLED_APPS 中添加设置。api01.apps.Api01Config,将其注册到项目中。

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'api01.apps.Api01Config'
    ]

    现在可以执行以下几个命令:

    下边命令的作用 :创建进程,类似于git

     python manage.py makemigrations api01
  • python manage.py migrate
  •  

     从上图就可以看出,数据库已经完全建好。其中api01_choice和api01_question就是我们所在models.py当建的表。

  • 答疑:我们所在models中写的代码是数据库代码的对应是什么 ?

    EGIN;
    --
    -- Create model Choice
    --
    CREATE TABLE "polls_choice" (
        "id" serial NOT NULL PRIMARY KEY,
        "choice_text" varchar(200) NOT NULL,
        "votes" integer NOT NULL
    );
    --
    -- Create model Question
    --
    CREATE TABLE "polls_question" (
        "id" serial NOT NULL PRIMARY KEY,
        "question_text" varchar(200) NOT NULL,
        "pub_date" timestamp with time zone NOT NULL
    );
    --
    -- Add field question to choice
    --
    ALTER TABLE "polls_choice" ADD COLUMN "question_id" integer NOT NULL;
    ALTER TABLE "polls_choice" ALTER COLUMN "question_id" DROP DEFAULT;
    CREATE INDEX "polls_choice_7aa0f6ee" ON "polls_choice" ("question_id");
    ALTER TABLE "polls_choice"
      ADD CONSTRAINT "polls_choice_question_id_246c99a640fbbd72_fk_polls_question_id"
        FOREIGN KEY ("question_id")
        REFERENCES "polls_question" ("id")
        DEFERRABLE INITIALLY DEFERRED;
    ​
    COMMIT;

    所以相比之下我们发现models的数据库创建的语法还是比较简单快捷的。

管理后台

  • 创建一个管理员账号

    python manage.py createsuperuser
  • 启动开发服务器

    python manage.py runserver

    到admin目录下,可以看到管理后台。

    如果未出现admin路由,则要检查全局下的urls路由分发

  •  

  • 向管理页面中加入投票应用

    api01/admin.py

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

  • 现在我们就可以用这个后台的Quetions了

 

需要掌握

  • 掌握视图,模型,后台

猜你喜欢

转载自blog.csdn.net/weixin_52312427/article/details/127041078