数据库设置
1. Django默认是使用sqlite, 如果您希望使用另一个数据库,安装适当的数据库绑定,并在数据库的 DATABASES 'default' 中更改下列键,以匹配数据库连接设置:
ENGINE – Either 'django.db.backends.sqlite3', 'django.db.backends.postgresql','django.db.backends.mysql', or 'django.db.backends.oracle'. Other backends are also available.
NAME – The name of your database. If you’re using SQLite, the database will be a file on your computer; in that case, NAME should be the full absolute path, including filename, of that file. The default value, os.path.join(BASE_DIR, 'db.sqlite3'), will store the file in your project directory.
INSTALLED_APPS
这包含了Django实例中被激活的所有Django应用程序的名称。应用程序可以在多个项目中使用,您可以打包和分发它们,供其他人在其项目中使用。
django.contrib.admin – The admin site.
django.contrib.auth – An authentication system.
django.contrib.contenttypes – A framework for content types.
django.contrib.sessions – A session framework.
django.contrib.messages – A messaging framework.
django.contrib.staticfiles – A framework for managing static files.
创建数据表
不过,其中一些应用程序至少使用了一个数据库表,因此在使用它们之前,我们需要在数据库中创建表。要做到这一点,请运行以下命令:
python manage.py migrate
各类数据库类型查看表指令:
\dt (PostgreSQL),
SHOW TABLES; (MySQL),
.schema (SQLite),
SELECT TABLE_NAME FROM USER_TABLES; (Oracle)
Creating models
模型是关于您的数据的唯一的、确定的真相来源。它包含您存储的数据的基本字段和行为。Django遵循了DRY原则。我们的目标是在一个地方定义您的数据模型,并自动从它派生出一些东西。
这包括迁移——例如,与Ruby On Rails不同,迁移完全是从您的模型文件中派生出来的,并且本质上是Django可以通过更新数据库模式来匹配您当前的模型的历史。
代码很简单。每一个模型都由一个子类来表示,子类是django.db.models.Model。每个模型都有许多类变量,每一个都代表模型中的数据库字段。
每一个字段都由一个字段类的实例来表示——例如,用于字符字段的CharField和datetimes的DateTimeField。这告诉Django每个字段保存的数据类型。
每个字段实例的名称(例如,问题文本或pubdate)是该字段的名称,以机器友好的格式。您将在Python代码中使用这个值,您的数据库将使用它作为列名。
一些字段类需要参数。例如,CharField要求你给它一个maxlength。这不仅在数据库模式中使用,而且在验证中使用,我们很快就会看到。
一个字段也可以有各种可选参数;在这种情况下,我们将选票的默认值设为0。
最后,请注意,使用外键定义关系。这告诉Django,每个选择都与一个问题有关。Django支持所有常见的数据库关系:多对一、多对多和一对一。
Activating models
That small bit of model code gives Django a lot of information. With it, Django is able to:
1. 为这款应用创建一个数据库模式(创建表语句)。
2. 创建一个用于访问问题和选择对象的Python数据库访问API。
1. But first we need to tell our project that the polls app is installed.
为了在我们的项目中包含这款应用,我们需要在INSTALLED_APPS 设置中添加一个对其配置类的引用。PollsConfig 类在 polls/apps.py文件,所以它的虚线是“polls.apps.PollsConfig”。编辑mysite/settings.py。py文件,并将虚线添加到INSTALLED_APPS 设置。它会看起来像这样:
2. Now Django knows to include the polls app. Let’s run another command:
通过运行 makemigrations,,你告诉Django你已经对你的模型做了一些修改(在这种情况下,你已经做了新的),并且你希望这些变化被存储为一个迁移。
python manage.py makemigrations polls
迁移是Django储存更改到您的模型(以及您的数据库模式)的方式——它们只是磁盘上的文件。如果你愿意,你可以阅读你的新模型的迁移;这是 polls/migrations/0001_initial.py。不要担心,你不会每次都读Django的时候读它们,但是它们被设计成可以编辑的,以防你想手动调整Django如何改变东西。
有一个命令会为您运行迁移,并自动管理您的数据库模式——这就是所谓的migrate,,我们稍后会讲到——但是首先,让我们看看迁移将运行什么SQL。sqlmigration命令接受迁徙名称并返回它们的SQL:
python manage.py sqlmigrate polls 0001
如果您感兴趣,您也可以运行 python manage.py check;;这将检查项目中的任何问题,而不需要进行迁移或接触数据库。
3. Now, run migrate again to create those model tables in your database:
python manage.py migrate
migrate 迁移命令接受所有未被应用的迁移(Django追踪哪些应用程序是在数据库中使用名为django_migrations的特殊表来应用的),并在数据库中运行它们——本质上是,将您对模型的更改与数据库中的模式同步。
迁移非常强大,随着时间的推移,您可以改变您的模型,在开发项目时,不需要删除数据库或表,并创建新的数据库——它专门用于升级数据库,而不会丢失数据。
请记住进行模型更改的三步骤指南:
Change your models (in models.py).
Run python manage.py makemigrations to create migrations for those changes
Run python manage.py migrate to apply those changes to the database.
Playing with the API
python manage.py shell
我们使用它而不是简单地输入“python”,因为 manage.py 设置了DJANGO_SETTINGS_MODULE 环境变量,它为Django提供了通往您的mysite/settings.py的Python导入路径文件。
Wait a minute. <Question: Question object (1)> isn’t a helpful representation of this object. Let’s fix that by editing the Questionmodel (in the polls/models.py file) and adding a __str__() method to both Question and Choice:
在您的模型中添加str()方法是很重要的,这不仅是为了您在处理交互式提示时的方便性,还因为在Django的自动生成的admin中使用了对象的表示。
For more information on model relations, see Accessing related objects For more on how to use double underscores to perform field lookups via the API, see Field lookupsFor full details on the database API, see our Database API reference.
介绍Django管理 (Admin)
哲学
为您的员工或客户生成管理站点来添加、更改和删除内容是一项单调乏味的工作,不需要太多的创造力。出于这个原因,Django完全自动化了用于模型的管理接口的创建。
Django是在一个新闻编辑室的环境中编写的,它在“内容发布者”和“公共”站点之间有着非常清晰的区别。网站管理员使用这个系统来添加新闻故事、事件、体育比分等,并且这些内容会在公共网站上显示。Django解决了为站点管理员创建一个统一的接口来编辑内容的问题。
管理员不打算被网站访问者使用。是为网站管理者。
创建一个管理员用户
First we’ll need to create a user who can login to the admin site. Run the following command:
python manage.py createsuperuser
Enter your desired username and press enter.
Username: admin
You will then be prompted for your desired email address:
Email address: admin@example.com
The final step is to enter your password. You will be asked to enter your password twice, the second time as a confirmation of the first.
Password: **********]
Password (again): *********
Superuser created successfully.
启动开发服务器
python manage.py runserver
Now, open a Web browser and go to “/admin/” on your local domain – e.g., http://127.0.0.1:8000/admin/. You should see the admin’s login screen:
由于翻译在默认情况下是打开的,所以登录屏幕可能会显示在您自己的语言中,这取决于您的浏览器的设置,以及Django是否有这种语言的翻译。
进入管理网站
现在,尝试使用您在上一步中创建的超级用户帐户登录。您应该看到Django admin索引页面::
您应该看到一些类型的可编辑内容:组和用户。它们是由 django.contrib.auth 认证框架,Django提供的认证框架。
让poll应用在管理员中可修改
但是我们的poll应用在哪里呢?它没有显示在管理索引页上。
有一件事要做:我们需要告诉管理员,问题对象有一个管理界面。要做到这一点,请打开 polls/admin.py,然后编辑它,看起来像这样:
polls/admin.py
探索免费的管理功能
Now that we’ve registered Question, Django knows that it should be displayed on the admin index page:
点击“Questions”。现在你在“改变列表”页面上提问。这个页面显示了数据库中的所有问题,并让您选择一个来更改它。有“What’s up?“我们之前提出的问题:
Click the “What’s up?” question to edit it:
注意事项:
1. 表单是由问题模型自动生成的。
2. 不同的模型字段类型(DateTimeField,CharField)对应于适当的HTML输入小部件。每种类型的字段都知道如何在Django管理员中显示自己。
每个DateTimeField都有免费的JavaScript快捷方式。日期得到一个“Today”的快捷方式和日历弹出,而时间得到一个“Now”快捷方式和一个方便的弹出框,通常列出了输入的时间。
页面的底部提供了一些选项:
Save – Saves changes and returns to the change-list page for this type of object.
Save and continue editing – Saves changes and reloads the admin page for this object.
Save and add another – Saves changes and loads a new, blank form for this type of object.
Delete – Displays a delete confirmation page.
如果“发布日期”的值与您创建问题的时间不匹配,那么它可能意味着您忘记为时区设置设置正确的值。改变它,重新加载页面并检查正确的值是否出现。
通过点击“Today”和“Now”的快捷方式来改变“发布日期”。然后点击“保存并继续编辑”。然后点击右上角的“历史”。您将看到一个页面,列出了通过Django管理员对该对象所做的所有更改,以及做出更改的人的时间戳和用户名: