Django是一个开源的Web应用框架,它使用Python语言编写,遵循BSD许可协议。BSD许可协议是一种非常宽松的开源软件许可协议,允许任何人使用、复制、修改和分发Django的代码。
Django的BSD许可协议包含了三个条款:
1. 允许任何人使用、复制、修改和分发Django的代码。 2. 在使用、复制、修改和分发Django时,必须在文件中包含原始版本的所有版权声明和免责声明。 3. 在使用、复制、修改和分发Django时,必须在文件中包含原始版本的所有条款和条件。
这些条款意味着:如果你想要使用或者修改Django代码,你必须遵守BSD协议中的所有条款。这意味着你不能将Django代码作为闭源或者具有特定功能限制的开源代码进行再发布。此外,如果你想要将Django代码作为一个独立产品进行再发布(例如在GitHub上或者其他地方),你也必须遵守BSD协议中的所有条款。
此外,如果你想要将Django应用于商业盈利目的(例如开发一个SaaS应用或者出售一个应用平台上的应用),也不会对你造成影响。因为BSD协议不会限制您对已保略版权声明和免责声明文件中包含内容进行促销或者出售。
总之,BSD协议是一种非常宽松而强大的开源协议。它允许任何人使用、复制、保留版权声明并添加特性或者出
Django 可以:
CREATE TABLE
语句)。Question
和 Choice
对象进行交互的 Python 数据库 API。但是首先得把 polls
应用安装到我们的项目里。
为了在我们的工程中包含这个应用,我们需要在配置类 INSTALLED_APPS
中添加设置。因为 PollsConfig
类写在文件 polls/apps.py
中,所以它的点式路径是 "polls.apps.PollsConfig"
。在文件 mysite/settings.py
中 INSTALLED_APPS
子项添加点式路径后,它看起来像这样:
INSTALLED_APPS = [
"polls.apps.PollsConfig",
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
]
现在你的 Django 项目会包含 polls
应用。接着运行下面的命令:
...> py manage.py makemigrations polls
你将会看到类似于下面这样的输出:
Migrations for "polls":
polls/migrations/0001_initial.py
- Create model Question
- Create model Choice
通过运行 makemigrations
命令,Django 会检测你对模型文件的修改(在这种情况下,你已经取得了新的),并且把修改的部分储存为一次 迁移。
迁移是 Django 对于模型定义(也就是你的数据库结构)的变化的储存形式 - 它们其实也只是一些你磁盘上的文件。如果你想的话,你可以阅读一下你模型的迁移数据,它被储存在 polls/migrations/0001_initial.py
里。别担心,你不需要每次都阅读迁移文件,但是它们被设计成人类可读的形式,这是为了便于你手动调整 Django 的修改方式。
Django 有一个自动执行数据库迁移并同步管理你的数据库结构的命令 - 这个命令是 migrate
,我们马上就会接触它 - 但是首先,让我们看看迁移命令会执行哪些 SQL 语句。sqlmigrate
命令接收一个迁移的名称,然后返回对应的 SQL:
...> py manage.py sqlmigrate polls 0001
你将会看到类似下面这样的输出:
BEGIN;
--
-- 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
);
--
-- Create model Choice
--
CREATE TABLE "polls_choice" (
"id" serial NOT NULL PRIMARY KEY,
"choice_text" varchar(200) NOT NULL,
"votes" integer NOT NULL,
"question_id" integer NOT NULL
);
ALTER TABLE "polls_choice"
ADD CONSTRAINT "polls_choice_question_id_c5b4b260_fk_polls_question_id"
FOREIGN KEY ("question_id")
REFERENCES "polls_question" ("id")
DEFERRABLE INITIALLY DEFERRED;
CREATE INDEX "polls_choice_question_id_c5b4b260" ON "polls_choice" ("question_id");
COMMIT;
请注意以下几点:
polls
)和模型名的小写形式( question
和 choice
)连接而来。(如果需要,你可以自定义此行为。)"_id"
。(同样,这也可以自定义。)FOREIGN KEY
生成。你不用关心 DEFERRABLE
部分,它只是告诉 PostgreSQL,请在事务全都执行完之后再创建外键关系。auto_increment
(MySQL)、 serial
(PostgreSQL)和 integer primary key autoincrement
(SQLite),Django 会帮你自动处理。那些和引号相关的事情 - 例如,是使用单引号还是双引号 - 也一样会被自动处理。sqlmigrate
命令并没有真正在你的数据库中的执行迁移 - 相反,它只是把命令输出到屏幕上,让你看看 Django 认为需要执行哪些 SQL 语句。这在你想看看 Django 到底准备做什么,或者当你是数据库管理员,需要写脚本来批量处理数据库时会很有用。现在,再次运行 migrate
命令,在数据库里创建新定义的模型的数据表:
...> py 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
这个 migrate
命令选中所有还没有执行过的迁移(Django 通过在数据库中创建一个特殊的表 django_migrations
来跟踪执行过哪些迁移)并应用在数据库上 - 也就是将你对模型的更改同步到数据库结构上。
迁移是非常强大的功能,它能让你在开发过程中持续的改变数据库结构而不需要重新删除和创建表 - 它专注于使数据库平滑升级而不会丢失数据。我们会在后面的教程中更加深入的学习这部分内容,现在,你只需要记住,改变模型需要这三步:
编辑 models.py
文件,改变模型。
运行 python manage.py makemigrations
为模型的改变生成迁移文件。
运行 python manage.py migrate
来应用数据库迁移。
数据库迁移被分解成生成和应用两个命令是为了让你能够在代码控制系统上提交迁移数据并使其能在多个应用里使用;这不仅仅会让开发更加简单,也给别的开发者和生产环境中的使用带来方便。
有一个方便的小技巧是指定视图参数的默认值。 下面是一个URLconf 和视图的示例:# URLconffrom django.urls import pathfrom . i...
为了帮助你更好的理解并控制由你的代码所产生的数据库查询,Django提供了一个钩子函数,在这个钩子函数中你可以在数据库查询方法外...
使用批量方法来减少SQL语句批量创建当创建对象时,尽可能使用 bulk_create() 方法来减少 SQL 查询数量。比如:Entry.objects...
Java Swing教程 -Java Swing标准对话框JOptionPane类使我们很容易创建和显示标准模态对话框。它包含许多静态方法来创建不同类型...