用Python编写的Web应用程序(Django)的简易教程(三)【应用程序创建和数据库设置篇】,适合初学者理解

解释文章的结构

No.タイトル
1PythonのWebアプリケーション(Django)を初心者にもわかりやすく解説(1)【環境構築編】
2PythonのWebアプリケーション(Django)を初心者にもわかりやすく解説(2)【プロジェクト作成編】
3PythonのWebアプリケーション(Django)を初心者にもわかりやすく解説(3)【アプリケーション作成・DB設定編】←4PythonのWebアプリケーション(Django)を初心者にもわかりやすく解説(4)【ルーティング設定・MTVデザインパターン入門編】
5PythonのWebアプリケーション(Django)を初心者にもわかりやすく解説(5)【Django shellでDB操作入門編】
6PythonのWebアプリケーション(Django)を初心者にもわかりやすく解説(6)【MTVデザインパターン完成編】

开发环境

    • OS: Mac OS Sierra (10.12)

 

    Python 3.5.2

我們將基於Mac的環境進行說話和進一步討論。

以下是确认Python版本的方式。

$ python3 --version
Python 3.5.2

创建应用程序

本次我们将从创建Django应用程序开始。

在这个项目中,我们将创建一个应用程序。
我们将根据Django Girls教程创建一个博客。

$ python3 manage.py startapp blog

以下是目录的结构安排。

myvenv
├── bin
├── blog
├── db.sqlite3
├── include
├── lib
├── manage.py
├── myapp
└── pyvenv.cfg

创建应用程序后,首先要进行设置文件的更改。
这是为了在Django上定义要使用的应用程序。

找到以下类似的代码,并在底部添加一个博客。

# Application definition
INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',
)

模型的建立

我们将创建一个用于在博客中使用的模型。
模型是一个方便的对象,可以存储数据。
这个模型本身也可以有方法,并且通过这个模型,我们可以处理与数据库的交互,而不用太过关注SQL等事项。

开始定义用于博客的模型。
打开blog/models.py文件,并按照以下内容进行修改。

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

class Post(models.Model):
    author = models.ForeignKey('auth.User')
    title  = models.CharField(max_length=200)
    text   = models.TextField()
    created_date = models.DateTimeField(default=timezone.now)
    published_date = models.DateTimeField(blank=True, null=True)

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title

这里的解释可能会有点长,但只需要从 Django Girls 教程的说明中摘录以下部分。

类Post(models.Model):-这行定义了本次模型(即对象)。

class是用来定义对象的关键字。Post是模型的名称。类名以大写字母开头。

models.Model表示Post是Django模型,Django可以知道这是应该保存到数据库中的内容。

现在让我们定义一些属性:
title、text、created_date、published_date、author

首先必须确定字段的类型。
文本?数字?日期?或与其他对象的关系,例如用户。

models.CharField – 用于定义文本长度的字段。
models.TextField – 这是用于无限制长文本的字段。
models.DateTimeField – 日期和时间字段。
models.ForeignKey – 这是指向其他模型的链接。

看起来是在模型中声明使用的属性的类型。

以下是一个关于Ruby on Rails的附言。

$ rails g model post author title text

通过这样的声明,可以创建迁移文件,所以与它进行比较可能会有些麻烦。

完成模型的定义后,我们要创建迁移文件。

$ python3 manage.py makemigrations blog
Migrations for 'blog':
  0001_initial.py:
    - Create model Post

因此,Django会为了将数据存入数据库而为我们创建迁移文件,然后我们进行迁移。

$ python3 manage.py migrate blog
Operations to perform:
  Apply all migrations: blog
Running migrations:
  Rendering model states... DONE
  Applying blog.0001_initial... OK

Post 模型已成功地被反映到数据库(SQLite)。

查询数据库

为了方便初学者,Django提供了通过浏览器GUI进行模型确认的功能。这个功能被称为Django admin。

首先,打开 blog/admin.py 文件,为刚才创建的 Post 模型更改 Django 管理界面配置。

from django.contrib import admin
from .models import Post

# Register your models here.
admin.site.register(Post)

设定已经完成了。

请启动服务器并从浏览器中访问Django管理界面(http://127.0.0.1:8000/admin)。
* 我建议您打开另一个终端,始终保持该服务器运行。

$ python3 manage.py runserver
スクリーンショット 2016-11-11 2.45.57.png

如果顺利的话,您可以访问这个网页。
然而,登录页面已经显示出来了,您记得设置过吗?
当然没有啦,要登录的话需要另外创建一个超级用户(网站管理员)。

那么,让我们创建一个superuser吧。

$ python manage.py createsuperuser
Username (leave blank to use 'your_name'): admin
Email address: email@example.com # メールアドレスを個別に設定
Password: # パスワードを入力
Password (again): # パスワードをもう一度
Superuser created successfully.

你已经成功创建了superuser。
现在,再次访问Django admin(http://127.0.0.1:8000/admin),并尝试登录吧。

スクリーンショット 2016-11-11 2.52.04.png

请使用刚刚创建的超级用户登录。

スクリーンショット 2016-11-11 2.52.11.png

当您可以无障碍登录时,可以访问此类画面。
尽管我们之前将其声明为“Post”,但它会自动变为复数形式“Posts”。

スクリーンショット 2016-11-11 2.56.16.png
スクリーンショット 2016-11-11 3.01.20.png

推荐在这种情况下使用Python 3系列,因为在Python 2系列中会出现Unicode错误等问题。由于处理日语非常复杂,因此仅仅因为这类问题在Python 3系列中得到了改进,Python 3系列就非常实用。

现在数据库的确认已经完成。
以后如果想要确认数据库,请求助于Django admin。

现在可以通过这个来设置模型并将其反映到数据库中,以便进行确认。

下一步,我们将创建一个原始模板,并对View进行编辑,使其可用。

下一篇解说文章

这篇文章是关于如何简单易懂地解释Python的Web应用程序(Django)给初学者(第四部分)【路由设置和MTV设计模式入门】。

文献的参考资料

    • Django

 

    Django Girls Tutorial「Djangoモデル」

奖品

期待你的关注!

    • Qiita: Carat 吉崎

twitter:@carat_yoshizaki

はてなブログ:Carat COOのブログ

ホームページ:Carat

如果您对能够一站式学习数学、编程和Web应用的机器学习一对一家庭教师服务“科学学”感到兴趣,请随时与我们联系。

广告
将在 10 秒后关闭
bannerAds