Django 初试水(二)

这部分链接上一部分。将建立数据库,创建第一个模型,并主要关注 Django 提供的自动生成的管理页面。

打开 mysite/setting.py 文件。这包含了 Django 项目设置的 Python 模块。通常,这个配置文件使用 SQLite 作为默认的数据库。

在此,我只是作为试水,不打算切换数据库。当然有需要的,可以自己去使用一些更具扩展性的数据库,例如 PostgreSQL 等。

如果你想使用其他数据库,你需要安装合适的 database bindings ,然后改变设置文件中 DATABASES 'default' 项目中的一些键值:

  • 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') 将会把数据库文件储存在项目的根目录。

如果你不使用 SQLite,则必须添加一些额外设置,比如 USER 、 PASSWORD 、 HOST 等等。想了解更多数据库设置方面的内容,请看文档:DATABASES 。

 首先创建模型

在 Django 里写一个数据库驱动的 web 应用第一步是定义模型,也就是数据库结构设计和附加的其他元数据。

修改 polls/models.py 添加两个模型,一个是问题,一个是选项。

 1 from django.db import models
 2 
 3 
 4 class Question(models.Model):
 5     question_text = models.CharField(max_length=200)
 6     pub_date = models.DateTimeField('date published')
 7 
 8 
 9 class Choice(models.Model):
10     question = models.ForeignKey(Question, on_delete=models.CASCADE)
11     choice_text = models.CharField(max_length=200)
12     votes = models.IntegerField(default=0)

在这里,每个模型都由django的子类表示。 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 支持所有常用的数据库关系:多对一、多对多和一对一。

激活模型

 上面的一小段代码给了 Django  很多信息。通过这些信息, Django 为这个应用

1.创建数据库 schema

2.创建可以与 Question(问题)和Choice(选项)对象进行交互的 Python 数据库 API 。

首先,把应用 Polls 安装到项目。

需要在配置类  INSTALLED_APPS 中添加设置。因为应用的 PollsConfig 写在文件 pollsapps.py 中。那么路径:'polls.apps.PollsConfig'

在项目的 setting.py  文件中修改。修改后:

1 INSTALLED_APPS = [
2     'polls.apps.PollsConfig',
3     'django.contrib.admin',
4     'django.contrib.auth',
5     'django.contrib.contenttypes',
6     'django.contrib.sessions',
7     'django.contrib.messages',
8     'django.contrib.staticfiles',
9 ]

接下来执行命令行:

 1 # 通过运行 makemigrations 命令,Django 会检测你对模型文件的修改(在这种情况下,你已经取得了新的),并且把修改的部分储存为一次 迁移。
 2 E:workpy_djmysite>python manage.py makemigrations polls
 3 Migrations for 'polls':
 4   pollsmigrations001_initial.py
 5     - Create model Question
 6     - Create model Choice
 7 
 8 # 查看脚本
 9 E:workpy_djmysite>python manage.py sqlmigrate polls 0001
10 BEGIN;
11 --
12 -- Create model Question
13 --
14 CREATE TABLE "polls_question" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "question_text" varchar(200) NOT NULL, "pub_date" datetime NOT NULL);
15 --
16 -- Create model Choice
17 --
18 CREATE TABLE "polls_choice" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "choice_text" varchar(200) NOT NULL, "votes" integer NOT NULL, "question_id" integer NOT NULL REFERENCES "polls_question" ("id") DEFERRABLE INITIALLY DEFERRED);
19 CREATE INDEX "polls_choice_question_id_c5b4b260" ON "polls_choice" ("question_id");
20 COMMIT;
21 
22 #自动执行数据库迁移并同步管理你的数据库结构的命令
23 E:workpy_djmysite>python manage.py migrate
24 Operations to perform:
25   Apply all migrations: admin, auth, contenttypes, polls, sessions
26 Running migrations:
27   Applying contenttypes.0001_initial... OK
28   Applying auth.0001_initial... OK
29   Applying admin.0001_initial... OK
30   Applying admin.0002_logentry_remove_auto_add... OK
31   Applying admin.0003_logentry_add_action_flag_choices... OK
32   Applying contenttypes.0002_remove_content_type_name... OK
33   Applying auth.0002_alter_permission_name_max_length... OK
34   Applying auth.0003_alter_user_email_max_length... OK
35   Applying auth.0004_alter_user_username_opts... OK
36   Applying auth.0005_alter_user_last_login_null... OK
37   Applying auth.0006_require_contenttypes_0002... OK
38   Applying auth.0007_alter_validators_add_error_messages... OK
39   Applying auth.0008_alter_user_username_max_length... OK
40   Applying auth.0009_alter_user_last_name_max_length... OK
41   Applying auth.0010_alter_group_name_max_length... OK
42   Applying auth.0011_update_proxy_permissions... OK
43   Applying polls.0001_initial... OK
44   Applying sessions.0001_initial... OK

注意:migrate 是一个强大的功能,这里没有详细的介绍。大家可以自己去了解。只要记住一下几步:

改变模型需要这三步:

  • 编辑 models.py 文件,改变模型。
  • 运行 python manage.py makemigrations 为模型的改变生成迁移文件。
  • 运行 python manage.py migrate 来应用数据库迁移。

使用  python manage.py shell 命令测试 API 吧!

 1 E:workpy_djmysite>python manage.py shell
 2 Python 3.7.4 (default, Aug  9 2019, 18:34:13) [MSC v.1915 64 bit (AMD64)]
 3 Type 'copyright', 'credits' or 'license' for more information
 4 IPython 7.8.0 -- An enhanced Interactive Python. Type '?' for help.
 5 
 6 In [1]: from polls.models import Choice,Question
 7 
 8 In [2]: Question.objects.all()
 9 Out[2]: <QuerySet []>
10 
11 In [3]: from django.utils import timezone
12 
13 In [4]: q = Question(question_text = "What's new?",pub_date = timezone.now())
14 
15 In [5]: q.save()
16 
17 In [6]: Question.objects.all()
18 Out[6]: <QuerySet [<Question: Question object (1)>]>
19 
20 In [7]: q.id
21 Out[7]: 1

更多的可以自己去尝试:https://docs.djangoproject.com/en/3.0/topics/db/queries/

介绍 Django 管理页面

创建管理员账号

 1 #创建账号管理员命令
 2 E:workpy_djmysite>py manage.py createsuperuser
 3 Username (leave blank to use 'joint'): sailor
 4 Email address: sailor@explem.com
 5 Password:
 6 Password (again):
 7 This password is too short. It must contain at least 8 characters.
 8 This password is too common.
 9 This password is entirely numeric.
10 Bypass password validation and create user anyway? [y/N]: y
11 Superuser created successfully.

这里用户名:sailor   password:123456 . 密码安全提示,最后确认创建Y。

创建完毕启动服务:

1 python manage.py runserver

现在,打开浏览器,转到你本地域名的 "/admin/" 目录, -- 比如 "http://127.0.0.1:8000/admin/" 。你应该会看见管理员登录界面:

登录

a

添加自己的应用

修改 polls/admin.py 注册应用

1 from django.contrib import admin
2 
3 from .models import Question
4 
5 admin.site.register(Question)

刷新页面,开始便捷的可视化操作。

a

a

a

原文地址:https://www.cnblogs.com/why-home/p/12332255.html