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

上一篇: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为数据库默认值,其他字段如下:

83e41d2a686964e49027a5c7d0cd97af.png

Django字段类型描述

5e566c8e76fd63fe5a26bd02dd6d444c.png

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/提示输入用户名和密码,为刚才通过命令创建的用户名和密码

ad5efdb4c618971653a662b03c9b2fb3.png

登录成功后即跳转到如下页面:

d185f4b6c4938db74b73eb9e31edd61f.png

在该界面中没有看到我们的投票相关应用,我们需要手工修改如下代码,找到polls/admin.py并编辑:

from django.contrib import adminfrom .models import Question# Register your models here.admin.site.register(Question)

保存后,不用重启服务器,刷新页面即可看到如下

5106b415663b7250dc759db86f564d13.png

Choice模型同样操作也可显示在界面上,到这里,基本上我们可以在管理后台进行数据修改,删除,新增等操作

下一篇:Python之Django系列-创建第一个应用-5

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/442656.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Exception in thread “main“ java.lang.IllegalArgumentException: Illegal Capacity: -1

创建list集合下标超出。 模拟场景 我是由于创建list ,大小的时候,写反了

三相同步电机怎么接线图_智能电表怎么接线 单相 三相电表接线图大全

电表分为单相电表和三相电表,接线方法又为直入式和互感式,现在我们分电表种类和接线方法,来讲解电表接线。单相电表直入式接线方法:家用单相电表的接线必须是左火L,右零N,左边火线进,火线出&…

window navicat连接阿里云服务器mysql步骤及常见问题

先登录自己的阿里云服务器 这有两个比较重要的,一个是配置出口端口, 还有一个就是拿到自己的公网ip 连接上服务器 我用的是finalshell 工具连接。 主要是基于docker安装mysql ,现在我的服务器docker已经安装了,安装也很简单。网…

docker安装mysql并使用navicat连接

创建映射目录,我安装在用户目录下 mkdir ~/mysql mkdir ~/mysql/conf mkdir ~/mysql/logs mkdir ~/mysql/data 分别执行以上命令,创建文件目录 #启动 docker run -id \ -p 3306:3306 \ --namemysql \ -v $PWD/conf:/etc/mysql/conf.d \ -v $PWD/logs:/lo…

linux centos7下载安装zlib

安装nginx 缺少zlib依赖,由于各种环境无法拉取yum安装, yum安装 yum install -y zlib zlib-devel 手动安装 zlib 版本预览 Index of /fossilshttp://www.zlib.net/fossils/ 解压 tar -zxvf zlib-1.2.8.tar.gz 进入加压后的文件 cd zlib-1.2.8 执行…

idea 升级到2020后 无法启动_升级iOS 14尝鲜后,无法降级 iOS13.5.1?

北京时间6月23日凌晨1点,苹果在线上举行了WWDC 2020全球开发者大会。给我们正式带来了iOS 14,并且在凌晨3点半时的时候,苹果发布 iOS 14 beta 内测版系统,并提供内测升级方法,随后很多用户已经升级体验。但是尝鲜之后&…

【pcre 依赖】linux安装pcre 依赖

记录转载 一、pcre PCRE(Perl Compatible Regular Expressions)是一个轻量级的Perl函数库,包括 perl 兼容的正则表达式库。它比Boost之类的正则表达式库小得多。PCRE十分易用,同时功能也很强大,性能超过了POSIX正则表达式库和一些经典的正则…

java和c++的区别大吗_小自考本科含金量高吗?小自考和大自考有什么区别?

随着成人教育的普及,自考学历变得越来越常见。但是很多人不知道自学考试考分为小自考和大自考,那么小自考和大自考的区别在哪里?小自考本科的含金量高吗?一、小自考本科的含金量高吗?很多人都想知道小自考本科的含金量…

高德地图JSAPI 2.0使用Java代码代替Nginx进行反向代理产生CORS跨域

解决前端访问高德产生的啥啥啥问题,反正问题交给后端做了, 解决高德代理连接: 高德地图JSAPI 2.0使用Java代码代替Nginx进行反向代理https://blog.csdn.net/shechaojin/article/details/126267635?ops_request_misc%257B%2522request%255Fi…

记录生产其妙BUG

奇妙bug本地复现不了,sit环境有问题,最后才发现本地一毫秒处理三十多条数据,所以每隔三十多秒就会有不同的时间,服务器每秒处理数量超过了预期数量,所以sit很容易复现 由于使用lindorm存在诸多限制。有一个业务数据量…

计算页数_中级会计师计算题、综合题的审题注意事项与解题思路

为什么要进行考前冲刺根据多年的考试和培训经验,考前过一遍课本是必须的,且提分相当明显。换种解释方式如果平时测试在40分左右的同学通过最后一个月的冲刺考过的概率能增加65%以上,但最后一个月抓不住机会就只能搁置到明年再考。时不待我&am…

使用中断后不停止_仓鼠偷吃鼠粮,被发现后立刻停止,但鼠鼠满脸不情愿

贪玩馋嘴,是很多宠物的天性,在主人不在家的时候,往往是它们暴露本性的时候。提起贪玩,人们往往会想到哈士奇,因为它们能在主人不在家的时候,把整个屋子给拆了;而提起贪吃,仓鼠却总被…

记录分库分表的分页查询

分库分表的分页查询。不同的业务场景可能不同。我只记录自己的分页方法 public PageAO<User> selectByPage(Filter filter, int page, int size) {//每页条数int pageSize size < 1 ? 10 : size;//计算起始位置int pageIndex page < 1 ? 0 : (page - 1) * pag…

c++查询当前文件夹下文件数目_python3自动化小工具--删除某个文件夹xx后缀文件...

源码 DelSomeFile.py""" 此代码用于删除文件夹下面以txt结尾的文件 &#xff08;同理将.txt-->.py可以删除py文件&#xff09; 借用pyqt5调用文件选择对话框看起来比较人性化点 本来是用win32ui的&#xff0c;但是win32ui不太人性化&#xff0c;不能选择文件…

creo组装后怎样移动元件_BGA元件SMT装配工艺要点简介

当SMT&#xff08;表面贴装技术&#xff09;/SMD&#xff08;表面贴装器件&#xff09;从业者发现间距为0.3mm的QFP&#xff08;四方扁平封装&#xff09;无法实现时&#xff0c;BGA&#xff08;球栅阵列&#xff09;的出现肯定会减少装配缺陷确保SMT质量成就。从系统理论的角度…

burpsuite csrf攻击_WEB安全之CSRF

大家好&#xff0c;我是阿里斯&#xff0c;一名IT行业小白。今天分享的内容是CSRF相关知识&#xff0c;不求表哥们打赏&#xff0c;只求点点在看&#xff0c;点点转发。CSRF漏洞概述CSRF(Cross-Site Request Forgery),中文名为跨站请求伪造&#xff0c;是一种Web攻击方式。该漏…

财物机器人英文ppt演讲课件_“如何恰当使用课件动画”

每晚21&#xff1a;30分享教师干货记得当大姜老师还是一名稚嫩的大一新生时&#xff0c;由于小时候家里管的比较严&#xff0c;几乎没什么碰电脑的机会。即便有了难得的机会&#xff0c;也都用来打游戏了......直到上了大学&#xff0c;需要做各种的汇报PPT、课件PPT、演讲PPT&…

curl 请求日志_kong api网关日志 将请求和响应数据附加到磁盘上的日志文件中

术语plugin&#xff1a;在请求被代理到上游API之前或之后&#xff0c;在Kong内部执行操作的插件。Service&#xff1a;表示外部上游 API或微服务的Kong实体。Route&#xff1a;Kong实体&#xff0c;表示将下游请求映射到上游服务的方法。Consumer&#xff1a;表示使用API​​的…

怎么主动发起话题_为什么男生不愿意主动追求女生了?这或许是最终的核心原因...

作为一个在情感领域和心理学领域深耕了许久的半吊子研究人员&#xff0c;对于情感话题一向都比较感兴趣。为什么男生不愿意主动追求女生了&#xff1f;这大概是近两年两性恋爱关系中最热门的话题了&#xff0c;每次都想在问答中回复&#xff0c;都没有想到一个完整的答案&#…

关闭 Pycharm 更新提示

File > settings > Appearance & Behavior > System Settings > Upadates 取消勾选 Automatically check updates for ……