Django入门学习(二)

喜夏-厌秋 提交于 2019-11-29 02:20:51

相隔一周,终于抽出点时间来完成对Django的对二部分学习,本次学习的内容主要是连接数据库,创建数据库模型和其他一些必备的设置。学习参考官网的Writing your first Django app, part 2

1、在settings.py中设置你安装的数据库

Django可以用很多种数据库,因此你需要告诉Django你准备用那种数据库,在settings.py文件中的DATABASES来说明,在这里面你会告诉Django你的数据库引擎(MySQL、Oracle、PostgreSQL等)、HOST、PORT、USER、PASSWORD、DATABASENAME、数据库默认编码等。在这,你有两种方式,一种是直接写到代码中,一种是把这些信息写到配置文件,然后通过读配置文件来实现相同的功能。通过代码直接写类似的代码如:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mydatabase',
        'USER': 'mydatabaseuser',
        'PASSWORD': 'mypassword',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}

参照官方文档说明

用配置文件的代码是这样的:

# settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {
            'read_default_file': 'E:/mysql-5.7.12-winx64/bin/my.cnf',
        },
    }
}


# my.cnf
[client]
database = NAME
user = USER
password = PASSWORD
default-character-set = utf8

这里需要说明一下,在Windows下,路径都是反斜杠 \ ,我第一次直接把路径复制到eclipse中,然后进行数据迁移时,出现了错误提示,我意识到应该是这个问题,因此改完后就好了,改的内容是

E:\mysql-5.7.12-winx64\bin\my.cnf>>>E:/mysql-5.7.12-winx64/bin/my.cnf 

其中my.cnf是你的配置文件,放在什么位置由你决定。

参照官方文档说明

2、做一次数据迁移(migrate)

其实数据迁移,按照我的理解就是把写的数据库代码应用到数据库中,比如你新建一个表,对一个表进行修改或删除等等。

数据库设置和连接好了后,就要开始运用数据库,并创建一些应用(APP)的数据表。Linux下的应用迁移命令:

$ python manage.py migrate

Windows下Eclipse对应的操作如下图:

可以看到之前用的很多命令,在这里都能找到(注意括号里面的解释)。

3、创建数据模型

在大学的时候都已经听说过MVC,M(model)、V(view)、C(control),也看过相应的一些书籍,同时也参加过和丹麦学生的国际合作项目,用的就是MVC。当时还是比较迷茫的,理解的不是很深刻。现在终于理解了,所谓的模型就是数据库表。其实很多涉及到数据库的系统比如购物、购票、成绩管理、学籍管理等,操作的都是数据库,都是以数据库为中心,所以模型的设计尤为核心,这也是整个系统的核心。当模型(数据库的表)设计好了后,接下来就是如何来操作和控制模型了即C(control),显示模型内容的活是由V(view)来完成的,我觉得MVC这种设计还是很好的。

Django就是这种架构,只不过Django是MVT。

我们来创建我们需要的数据模型,需要创建一个Question表和一个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)

是两个类,每个类会生成一个数据表,类中有若干个变量,这些变量就是表中的字段。如果你有数据库的基础会很容易理解的。到目前为止,polls应用的模型代码已经写好了,只等运行这些代码来在数据库中生成相应的表了,至于这些类是如何一步步变成数据库的表的细节问题,可以参见官网文档。

4、挂载应用

为什么会有挂载应用呢?首先要说明一下工程(project)和应用(app)的区别。我们要做一个项目,肯定会先建一个工程,然后会在工程下面根据不同功能需要写不同的应用来完成不同的任务,应用也是相对独立的。但是Django对于工程和应用的设计是相当灵活的,一个工程里可以包含多个应用,并且这些应用可以是其他工程的应用,就是工程1的应用1可以在工程2中被调用,从这个角度来说,应用是相对独立的,没有从属关系。下面是一张工程和应用的关系图:

正是因为这样灵活的原因,一个工程要包含一个应用,一定要把这个应用挂载到这个工程下面,挂载是我自己的形象说法。怎么挂载,图中已经说的很明白了。下图是INSTALLED_APPS  的截图:

5、生成模型

挂载完应用后,接下来就是生成模型,真正的操作数据库了。执行的生成迁移命令为:

$ python manage.py makemigrations polls

在eclipse中的操作前面已经说过了,在此不再赘述。

执行完,会生成一个文件polls/migrations/0001_initial.py,感兴趣的话可以打开看看。如果想知道到底真正执行了那些SQL语句,可以执行下面这条命令:

$ python manage.py sqlmigrate polls 0001

这条命令只显示执行的SQL语句,并不会操作数据库,更不会改变数据,所以你可以很放心的执行。

生成完迁移,我们需要把生成的迁移应用到数据库中,应用迁移的命令:

$ python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, polls, sessions
Running migrations:
  Rendering model states... DONE
  Applying polls.0001_initial... OK

makemigration和migrate分别是生成迁移和应用迁移。到目前为止对此二者的理解还不是很深刻,以下是官网的文档:

Migrations are very powerful and let you change your models over time, as you develop your project, without the need to delete your database or tables and make new ones - it specializes in upgrading your database live, without losing data. We’ll cover them in more depth in a later part of the tutorial, but for now, remember the three-step guide to making model changes:

The reason that there are separate commands to make and apply migrations is because you’ll commit migrations to your version control system and ship them with your app; they not only make your development easier, they’re also useable by other developers and in production.

我感觉Django之所以把模型到数据库分为三步执行,是想划分的更细,更细就是更安全更灵活。在后面的学习中如果对此理解的更深的话,会再修改这部分内容的。

6、创建网站管理员

Django会为我们开发的网站自动生成一个CMS系统,这样我们就可以很方便的来管理网站的内容了,包括上传、下载、删除、更新等操作。我们需要做的就是为网站创建一个管理员,创建命令为:

$ python manage.py createsuperuser

在Windows下,我用eclipse没有成功,所以我通过在dos下进入到mysite工程目录,然后执行相同的命令来实现,请看截图:

创建完成后,再开启web服务器,在浏览器的地址栏中输入http://127.0.0.1:8000/admin/ 即可进入管理员的登录界面,输入用户名和密码进入。

此时,我们还不能看到polls应用的后台管理,我们需要对polls/admin.py编辑来实现,修改内容如下

polls/admin.py

from django.contrib import admin

from .models import Question

admin.site.register(Question)

然后再后台界面中就可以看到polls应用了,我们可以添加问题了。

拖了这么长时间,终于把第二部分写完啦!感谢大家的观看,后续还会继续!

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!