django模型和admin站点(二)

数据库设置

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管理员对该对象所做的所有更改,以及做出更改的人的时间戳和用户名:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容