上一篇: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字段类型描述

Django字段类型描述

通过上述模型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

django 默认查询条件_Python之Django系列-创建第一个应用-4相关推荐

  1. python 创建一个空向量_Python之Django系列-创建第一个应用-5

    上一篇:Python之Django系列-创建第一个应用-4 这一章我们会讲到视图层怎么与数据库操作并返回数据到模板层进行渲染最终显示在页面上 投票应用基本上会有这么几个视图 问题列表页 问题详情页 问 ...

  2. django模型查询_如何在Django中编写有效的视图,模型和查询

    django模型查询 I like Django. It's a well-considered and intuitive framework with a name I can pronounce ...

  3. python django框架如何导出_python框架django的数据库的正向生成和反向生成

    正向生成,指的是先创建model.py文件,然后通过django内置的编译器,在数据库如mysql中创建出符合model.py的表. 反向生成,指的是先在数据库中create table,然后通过dj ...

  4. python创建提示用户输入查询条件_python流程控制练习

    ''' if条件 ''' 示例 sex= 'female' age=19 is_beautiful=True is_successful=True height=1.70 if sex =='fema ...

  5. Oracle 数据库 - sql语句筛选出符合查询条件的第一条结果实例演示,sql查询结果只显示指定行数的数据方法

    默认看到查询条件有 3 条结果,我想只查询出日期最晚的那一条记录. -- 默认查询条件 select settledate as "日期", syscalculationmny a ...

  6. 26:第三章:开发通行证服务:9:【注册/登录】接口:验证码校验OK后,先根据手机号去查查该用户是否已存在,如果用户不存在就创建这个用户;(tkmybatis查询构建查询条件,雪花算法,枚举类等等)

    说明: (1)本篇博客内容:继续开发[注册/登录]接口: ● 在[25:第三章:开发通行证服务:8:[注册/登录]接口:接收并校验"手机号和验证码"参数:]中,[注册/登录]接口, ...

  7. 067:【Django数据库】ORM查询条件详解-range

    [Django数据库]ORM查询条件详解-range range: 判断某个 field 的值是否在给定的区间中.示例代码如下: # views.py文件内容:from datetime import ...

  8. python爬虫 django搜索修改更新数据_一文搞懂Django数据库查询操作

    本文略长,读完约需十分钟.当做复习笔记效果更佳. 查询操作: 数据查询是数据库操作中一个非常重要的技术.查询一般就是使用filter.exclude以及get三个方法来实现.我们可以在调用这些方法的时 ...

  9. 【django】查询集QuerySet

    一.概念 Django的ORM中存在 查询集 的概念. 查询集,也称查询结果集.QuerySet,表示从数据库中获取的对象集合. 当调⽤如下过滤器⽅法时,Django会返回查询集(⽽不是简单的列表): ...

最新文章

  1. 函数式编程语言python-10分钟学会python函数式编程
  2. 绘制业务流程图:流程图绘制工具
  3. 大话后端开发的奇淫技巧大集合
  4. myeclipse 没有任何问题,可偏偏还报这错。
  5. tensorflow入门基础
  6. python全栈学习--day12(函数高级应用-带参数的装饰器,多个装饰器装饰一个函数)...
  7. c++switch语句中不能进行变量定义吗_Go 指南--控制流语句
  8. 鸿蒙手表怎么安装,万物皆可鸿蒙,这次鸿蒙系统将应用到手表上了
  9. 大规模数据如何实现数据的高效追溯?
  10. python数据可视化编程实战 第2版 github_Python数据可视化编程实战(三):在Mac OS X上安装matplotlib...
  11. 九种跨域方式的实现原理,第一个就超惊艳!| 技术头条
  12. 飞机订票系统- c语言课程设,C语言课程设计飞机订票系统设计
  13. 基于Lumerical fdtd的超透镜设计(介质天线结构和金属谐振结构)
  14. android 视频录制锐化,从录制到剪辑,用的同款APP,为什么你录制的游戏视频画面会远不如别人?...
  15. webpack入门使用教程
  16. 《状态变量分析导论》学习总结
  17. Compose Multiplatform 正式官宣,与 Flutter 迟早必有一战?
  18. PMP续证流程(PMI)
  19. 考虑线程安全的List集合选择
  20. BF518的interrupt

热门文章

  1. oracle数据库日期格式的运算,Oracle时间类型date,timestamp时间差计算
  2. java随机产生十个坐标_java中随机坐标
  3. 十进制小数化为二进制小数的方法是什么_十进制转成二进制的两种方式
  4. mysql skip_counter_mysql的三个故障解决小结
  5. 双稳态电路的两个稳定状态是什么_从双稳态到双“更”稳态 ——叶芳伟课题组在拓扑光子学研究方向上取得新进展...
  6. python excel token_python+excel接口自动化获取token并作为请求参数进行传参操作
  7. 【转】解密Qt安装目录的结构
  8. visual-studio – 使用TFS 2010防止在Visual Studio 2012上签入pdb文件
  9. 一键锁屏_ios快捷指令一键登录校园网(桂航为例,哆点认证)
  10. 百度云cdn设置州五年制大专_图说云原生:让云原生转型变得像种白菜一样简单...