





基于Django官方文档
使用Pycharm创建Django

Django项目结构
1 | DjangoDemo # 根目录只是项目的容器 |
Django应用结构
1 | polls |
命令行启动项目
1 | python manage.py runserver |
创建应用视图
创建视图,打开 polls/views.py,把下面这些 Python 代码输入进去:
1 | from django.http import HttpResponse |
如果想看见效果,我们需要将一个 URL 映射到它——这就是我们需要 URLconf 的原因了。
创建 URLconf,在polls中新建urls.py文件
1 | polls |
在urls.py中,输入如下代码:
1 | from django.urls import path |
在根 URLconf 文件中指定我们创建的 polls.urls 模块。在 DjangoDemo/urls.py 文件的 urlpatterns 列表里插入一个 include(), 如下:
1 | from django.contrib import admin |
函数 include() 允许引用其它 URLconfs。每当 Django 遇到 include() 时,它会截断与此项匹配的 URL 的部分,并将剩余的字符串发送到 URLconf 以供进一步处理。
你现在把 index 视图添加进了 URLconf。通过以下命令验证是否正常工作:
1 | python manage.py runserver |
访问http://127.0.0.1:8000/polls/而不是http://127.0.0.1:8000
path()函数
path(route, view, [kwargs], [name])
-
route:是一个匹配 URL 的准则(类似正则表达式)。当 Django 响应一个请求时,它会从urlpatterns的第一项开始,按顺序依次匹配列表中的项,直到找到匹配的项。这些准则不会匹配 GET 和 POST 参数或域名。例如,URLconf 在处理请求https://www.example.com/myapp/时,它会尝试匹配myapp/。处理请求https://www.example.com/myapp/?page=3时,也只会尝试匹配myapp/。 -
view:当 Django 找到了一个匹配的准则,就会调用这个特定的视图函数,并传入一个HttpRequest对象作为第一个参数,被“捕获”的参数以关键字参数的形式传入。 -
kwargs:任意个关键字参数可以作为一个字典传递给目标视图函数。 -
name:为你的 URL 取名能使你在 Django 的任意地方唯一地引用它,尤其是在模板中。这个有用的特性允许你只改一个文件就能全局地修改某个 URL 模式。
基础配置
在 DjangoDemo/settings.py 中
设置域名访问权限
1 | myblog/settings.py |
设置TEMPLATES里的’DIRS’,添加模板目录templates的路径,后面我们做网站模板的时候用得着。
1 | # 修改前 |
找到DATABASES设置网站数据库类型。这里我们使用默认的sqlite3。如果需要使用Mysql请查看文章:Django如何使用Mysql数据库,其它数据库请查看官方文档。官方文档,后期上线部署的话,也可以进行数据库与数据库之间的数据转换。具体可查看:如何把SQLite数据库转换为Mysql数据库
在INSTALLED_APPS添加APP应用名称。
1 | INSTALLED_APPS = [ # Django 的自带应用 |
修改项目语言和时区
1 | myblog/settings.py |
在项目根目录里创建static和media,两个目录。static用来存放模板CSS、JS、图片等静态资源,media用来存放上传的文件,后面我们在讲解数据库创建的时候有说明。
settings里找到STATIC_URL,然后在后面一行加上如下代码。
1 | # 设置静态文件目录和名称 |
基本配置完成,更多关于配置文件的介绍,请查看文章:全局配置settings详解
配置数据库
在 DjangoDemo/settings.py 中
1 | # 默认情况 |
-
ENGINE:可选值有'django.db.backends.sqlite3','django.db.backends.postgresql','django.db.backends.mysql',或'django.db.backends.oracle'。其它 可用后端。 -
NAME:数据库的名称。如果使用的是 SQLite,数据库将是你电脑上的一个文件,在这种情况下,NAME应该是此文件的绝对路径,包括文件名。默认值os.path.join(BASE_DIR, 'db.sqlite3')将会把数据库文件储存在项目的根目录。
1 | ############修改成mysql如下: |
数据库设置好之后,我们就依次输入下面的命令进行数据库迁移:
1 | python manage.py makemigrations |
这个 migrate 命令检查 INSTALLED_APPS 设置,为其中的每个应用创建需要的数据表,至于具体会创建什么,这取决于你的 settings.py 设置文件和每个应用的数据库迁移文件。
创建模型
在这个投票应用中,需要创建两个模型:问题 Question 和选项 Choice。
Question 模型包括问题描述和发布时间。Choice 模型有两个字段,选项描述和当前得票数。每个选项属于一个问题。
在models.py文件中写入以下内容:
1 | from django.db import models |
每个模型被表示为 django.db.models.Model 类的子类。每个模型有许多类变量,它们都表示模型里的一个数据库字段。
每个字段都是 Field 类的实例 - 比如,字符字段被表示为 CharField ,日期时间字段被表示为 DateTimeField 。这将告诉 Django 每个字段要处理的数据类型。
每个 Field 类实例变量的名字(例如 question_text 或 pub_date )也是字段名,所以最好使用对机器友好的格式。你将会在 Python 代码里使用它们,而数据库会将它们作为列名。
你可以使用可选的选项来为 Field 定义一个人类可读的名字。这个功能在很多 Django 内部组成部分中都被使用了,而且作为文档的一部分。如果某个字段没有提供此名称,Django 将会使用对机器友好的名称,也就是变量名。在上面的例子中,我们只为 Question.pub_date 定义了对人类友好的名字。对于模型内的其它字段,它们的机器友好名也会被作为人类友好名使用。
定义某些 Field 类实例需要参数。例如 CharField 需要一个 max_length 参数。这个参数的用处不止于用来定义数据库结构,也用于验证数据,我们稍后将会看到这方面的内容。
Field 也能够接收多个可选参数;在上面的例子中:我们将 votes 的 default 也就是默认值,设为0。
注意在最后,我们使用 ForeignKey 定义了一个关系。这将告诉 Django,每个 Choice 对象都关联到一个 Question 对象。Django 支持所有常用的数据库关系:多对一、多对多和一对一。
激活模型
把 polls 应用安装到我们的项目里,见基础配置
运行下面的命令:
1 | python manage.py makemigrations polls |
Terminal输出:
1 | Migrations for 'polls': |
通过运行 makemigrations 命令,Django 会检测你对模型文件的修改(在这种情况下,你已经取得了新的),并且把修改的部分储存为一次迁移。
迁移是 Django 对于模型定义(也就是你的数据库结构)的变化的储存形式,它们其实也只是一些你磁盘上的文件。如果你想的话,你可以阅读一下你模型的迁移数据,它被储存在 polls/migrations/0001_initial.py 里。别担心,你不需要每次都阅读迁移文件,但是它们被设计成人类可读的形式,这是为了便于你手动调整Django的修改方式。
Django 管理页面
创建一个管理员账号
1 | python manage.py createsuperuser |

