Django学习笔记02 | 编写一个Django应用02

一、安装 MySQL 并在 Pycharm 安装 pymysql

安装 MySQL 可以参考我的这篇博客:MySQL 5.7.21 安装教程

因为 Python2的mysql库为:mysqldb,而Python3的为:pymysql,所以要在 Pycharm 中安装 pymysql 。和之前安装 django 类似,见下图:

image

二、数据库配置

打开 mysite/settings.py,找到 DATABASES ,修改红框里面的内容:

image

输入代码:

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

如果 NAME 不写成 mysql 的话,进行下面操作会报错:

image

因为是 Python3 ,切记要在同级的 __init__.py 文件添加以下代码:

import pymysql
pymysql.install_as_MySQLdb()
image

然后在 Terminal 中输入下面命令:

python manage.py migrate

此时又遇到一个报错:

image

根据上图显示的文件位置找到 operations.py ,修改 decodeencode 即可,大概在 146 行。

image

可能也会遇到另一个错,把 operations.py 同级的一个名为 base.py 的文件 35、36 这两行注释掉:

image

再次运行一下上面的命令,会看到:

image

三、创建模型

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

编辑 polls/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) # 当前得票数

四、激活模型

在文件 mysite/settings.pyINSTALLED_APPS 子项添加点式路径:

'polls.apps.PollsConfig',

结果如红框所示:

image

然后在 Terminal 中输入下面命令:

python manage.py makemigrations polls

将会看到类似于下面这样的输出:

image

下面进行迁移:

python manage.py sqlmigrate polls 0001

将会看到:

image

再次运行 migrate 命令,在数据库里创建新定义的模型的数据表:

python manage.py migrate
image

改变模型需要这三步:

  • 编辑 models.py 文件,改变模型。
  • 运行 python manage.py makemigrations 为模型的改变生成迁移文件。
  • 运行 python manage.py migrate 来应用数据库迁移。

五、初试 API

Terminal 输入下面命令,进入交互式 Python 命令行:

python manage.py shell
image

成功进入后,试试 database API 吧,试之前先修改一下 models.py 模型代码:

# Create your models here.

import datetime

from django.db import models
from django.utils import timezone


class Question(models.Model):
    question_text = models.CharField(max_length=200) # 问题描述
    pub_date = models.DateTimeField('date published') # 发布时间

    def __str__(self):
        return self.question_text

    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200) # 选项描述
    votes = models.IntegerField(default=0) # 当前得票数

    def __str__(self):
        return self.choice_text

然后就可以试试 database API 了:

from polls.models import Choice, Question
Question.objects.all()
from django.utils import timezone
q = Question(question_text="What's new?", pub_date=timezone.now())
q.save()
q.id
q.question_text
q.pub_date
image

需要退出交互式 Python 命令行时,按 Ctrl+Z 即可。

六、创建一个管理员账号

输入下面命令:

python manage.py createsuperuser

然后分别输入用户名、邮箱、密码、再次确认。

image

七、启动开发服务

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

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

python manage.py runserver

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

image

输入刚才注册的用户名和密码,就能进入管理了:

image

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

发现投票应用没在索引页面里显示,于是我们需要告诉管理页面,问题 Question 对象需要被管理。打开 polls/admin.py 文件,把它编辑成下面这样:

from django.contrib import admin

from .models import Question

admin.site.register(Question)

九、体验便捷的管理功能

现在我们向管理页面注册了问题 Question 类。Django 知道它应该被显示在索引页里,刷新一下页面就有了:

image

点击 "Questions" 。现在看到是问题 "Questions" 对象的列表 "change list" 。这个界面会显示所有数据库里的问题 Question 对象,你可以选择一个来修改。这里现在有我们在上一部分中创建的 “What's up?” 问题。

image

点击 “What's up?” 来编辑这个问题(Question)对象:

image

通过点击 “今天(Today)” 和 “现在(Now)” 按钮改变 “发布日期(Date Published)”。然后点击 “保存并继续编辑(Save and add another)”按钮。然后点击右上角的 “历史(History)”按钮。你会看到一个列出了所有通过 Django 管理页面对当前对象进行的改变的页面,其中列出了时间戳和进行修改操作的用户名:

image

十、致谢

编写你的第一个 Django 应用,第 2 部分

Pycharm数据库连接错误

django.db.utils.OperationalError: (1049, "Unknown database 'djangodb'")

你可能感兴趣的:(Django学习笔记02 | 编写一个Django应用02)