上一篇:Python之Django系列-创建第一个应用-3
上一篇文章我们介绍了创建项目,打开浏览器访问http://127.0.0.1:8000/polls/,能看见"投票主页视图"等描述。
本篇文章我们接着上一篇文章继续学习,在Python之Django系列-初始Django-1介绍到Django是一个MTV框架,M代表Model即模型层,模型层通常是与数据库做交互,而Django中与数据库相关的配置在mysite/settings.py文件中,在修改配置文件前,我们先设置该配置文件中的时区为"Asia/Shanghai",配置如下:
TIME_ZONE = 'Asia/Shanghai'
在Django中,默认使用的数据库为SQLite,具体的配置如下:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', }}
当然我们也可以更改为其他数据库,如Oracle,Mysql,Pg等等,下面的配置为Mysql配置,其他配置也可参考类似:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mydatabase', 'USER': 'mydatabaseuser', 'PASSWORD': 'mypassword', 'HOST': '127.0.0.1', 'PORT': '3306', }}
其中ENGINE属性是数据库引擎驱动,根据自己所需选择不同数据库引擎,主要有以下几种:
- django.db.backends.sqlite3
- django.db.backends.postgresql
- django.db.backends.mysql
- django.db.backends.oracle
以上为数据库配置,配置文件中还有一个重要的配置为INSTALLED_APPS,默认包含了以下Django自带应用:
- django.contrib.admin -- 管理员站点, 你很快就会使用它。
- django.contrib.auth -- 认证授权系统。
- django.contrib.contenttypes -- 内容类型框架。
- django.contrib.sessions -- 会话框架。
- django.contrib.messages -- 消息框架。
- django.contrib.staticfiles -- 管理静态文件的框架。
这些默认应用提供了一个项目常用的框架,当然要使用这些应用,我们需要依赖对应这些默认应该所需的表,通过以下命令可以同步默认应用下所有相关的表到数据库中:
E:DeveloperpythonDjangomysite>python manage.py migrateOperations to perform: Apply all migrations: admin, auth, contenttypes, sessionsRunning migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying auth.0010_alter_group_name_max_length... OK Applying auth.0011_update_proxy_permissions... OK Applying auth.0012_alter_user_first_name_max_length... OK Applying sessions.0001_initial... OK
migrate命令会检查INSTALLED_APPS配置,为每一个应用创建对应的表,执行完之后,可以在对应的数据库中查询到对应的表
创建投票应用模型
投票应用我们分为Question和Choice两个模型,Question 模型包括问题描述和发布时间。Choice 模型有两个字段,选项描述和当前得票数。每个选项属于一个问题。
找到polls/models.py 文件并编辑:
from django.db import models# Create your models here.class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField('date published')class Choice(models.Model): question = models.ForeignKey(Question, on_delete=models.CASCADE) choice_text = models.CharField(max_length=200) votes = models.IntegerField(default=0)
每个模型都需要继承django.db.models.Model,模型中的变量代表为数据库中的字段,在该代码中,可以看到CharField,DateTimeField,IntegerField等都代表为数据库表中的字段类型,有使用过数据库的基本都能理解,max_length代表字符长度,default为数据库默认值,其他字段如下:
通过上述模型Django可以为该模型生成对应的数据库表,但前提是,我们需要安装该应用到我们项目mysite
怎么安装?
在mysite/settings.py中找到INSTALLED_APPS变量,把"polls.apps.PollsConfig"加到最后一行,最终如下:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'polls.apps.PollsConfig',]
接下来执行如下命令
python manage.py makemigrations polls
将会看到如下输出:
Migrations for 'polls': polls/migrations/0001_initial.py - Create model Question - Create model Choice
通过运行 makemigrations 命令,Django 会检测你对模型文件的修改,然后通过migrate命令可以对修改的内容同步到数据库,但是在执行命令之前,我们可以看看会migrate将会执行什么样的SQL命令,通过如下命令查看:
E:DeveloperpythonDjangomysite>python manage.py sqlmigrate polls 0001---- Create model Question--CREATE TABLE `polls_question` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `question_text` varchar(200) NOT NULL, `pub_date` datetime(6) NOT NULL);---- Create model Choice--CREATE TABLE `polls_choice` (`id` integer AUTO_INCREMENT 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`);
查看将要执行的SQL语句没问题,现在我们可以执行migrate命令进行同步
python manage.py migrate
执行完成之后,将会把本次的Model更改内容同步到对应的数据库表结构上,这个功能非常强大,后面基本会用到,基本流程为:
- 编辑 models.py 文件,改变模型。
- 运行 python manage.py makemigrations 为模型的改变生成迁移文件。
- 运行 python manage.py migrate 来应用数据库迁移。
在以上命令成功执行后,对应的也会自动生成和数据库做交互的API
API尝试
通过以下命令,进入Python交互式命令行:
E:DeveloperpythonDjangomysite>python manage.py shellPython 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 23:03:10) [MSC v.1916 64 bit (AMD64)] on win32Type "help", "copyright", "credits" or "license" for more information.(InteractiveConsole)>>> from polls.models import Question,Choice>>> Question.objects.all()>>> from django.utils import timezone>>> q = Question(question_text="问题是什么", pub_date=timezone.now())>>> q.save()>>> q.id1>>> q.question_text'问题是什么'>>> q.pub_datedatetime.datetime(2020, 12, 6, 9, 42, 43, 472917, tzinfo=)>>> q.question_text='问题是这样?'>>> q.save()>>> Question.objects.all()]>
如需退出命令行,执行方法exit()
Django管理界面介绍
首先,我们得创建一个能登录管理页面的用户。请运行下面的命令:
python manage.py createsuperuser
然后按照提示输入用户名,邮箱,密码即可,最后显示"Superuser created successfully."既表示创建用户成功,接着重新启动服务器,运行如下命令:
python manage.py runserver
启动成功之后,打开浏览器,输入地址:http://127.0.0.1:8000/admin/提示输入用户名和密码,为刚才通过命令创建的用户名和密码
登录成功后即跳转到如下页面:
在该界面中没有看到我们的投票相关应用,我们需要手工修改如下代码,找到polls/admin.py并编辑:
from django.contrib import adminfrom .models import Question# Register your models here.admin.site.register(Question)
保存后,不用重启服务器,刷新页面即可看到如下
Choice模型同样操作也可显示在界面上,到这里,基本上我们可以在管理后台进行数据修改,删除,新增等操作
下一篇:Python之Django系列-创建第一个应用-5