django与数据库交互,django内置数据库
Yyds干货库存
认识Django-目录第1部分:[认识Django]——(1)创建一个项目
第2部分:[遇见Django]——(2)数据库配置
第三部分:[遇见姜戈]——(3)观点
第四部分:[遇见姜戈]——(4)表格和共同意见
第五部分:【遇见Django】—— (5)改进界面(自定义界面和风格)
第六部分:[遇见Django]——(六)用户自定义管理界面
第7部分:[遇见Django]——(VII)自动化测试
@TOC
序
这一系列文章,在Django的公文教程的基础模板下,做了一定程度的改进和删减,增加了一些自己的见解。
希望你看完这一系列文章后,能对Django有一个清晰的认识。
这是一条漫长的路,修远,我会上下!
Django==官方文件==:https://www.djangoproject.com/
在学习的过程中,多阅读官方文件,可以解决很多问题。
本教程使用诗歌来管理项目环境。
诗的安装和使用请参考【Python-Virtual Environment】项目启动,从隔离开发环境开始_CoderChaos的技术博客_博客。
一、项目配置文件settings.py
1.1数据库配置
Mysite/settings.py是一个包含Django项目设置的Python模块。
数据库的配置存在于变量数据库中。
Django默认使用SQLite作为默认数据库。Python内置了SQLite,所以你不用安装任何额外的东西就可以使用它。
如果是做真实项目,最好不要用SQLite。
# Django默认使用SQLite
数据库={
默认:{
引擎: django.db.backends.sqlite3 ,
NAME: BASE_DIR/db.sqlite3 ,
# Django配置了MySQL
数据库={
默认:{
引擎: django.db.backends.mysql ,
NAME: mysite ,#使用MySQL时,需要事先在MySQL中创建mysite数据库。
主机: 127.0.0.1 ,
端口:3306,
用户: root ,
密码: *****
}
参数描述:
Default:当Django连接到一个数据库时,默认情况下的数据库是默认链接的。
引擎:有多个可选值。
django.db.backends.sqlite3
django.db .后端. postgresql
django.db.backends.mysql
django.db.backends.oracle
其他第三方数据库后端。基准地址
名称:数据库的名称。如果使用SQLite,数据库将是计算机上的一个文件。BASE_DIR/db.sqlite3 的默认值将把数据库存储在项目的根目录中。
其他参数:如果不使用SQLite,必须添加一些额外的设置,比如用户、密码、主机等。参考文件
注意:如果您使用SQLite以外的数据库,那么在使用它之前,您需要确认您已经创建了该数据库。您可以在数据库交互式命令行中使用CREATE DATABASE database_name。以完成数据库的创建。
1.2时区和语言
您可以在settings.py文件中修改时区和语言。
#语言
语言代码=zh-hans
TIME_ZONE=亚洲/上海
1.3 Django默认独立应用程序介绍
settings.py文件中的一些说明:INSTALLED_APPS
默认情况下,INSTALLED_APPS包括以下Django自己的应用程序:
Django.contrib.admin:管理员站点
Django.contrib.auth:认证和授权系统
django . content types:内容类型的框架
Django.contrib.sessions:会话框架
消息:消息框架
Django.contrib.staticfiles:管理静态文件的框架
一些默认打开的应用程序需要至少一个数据表,因此您需要在使用它们之前在数据库中创建一些表。需要以下命令:python manager . py migrate。
第二,创建模型
定义模型,即数据库结构设计和其他附加元数据。
在这个投票应用程序中,需要创建两个模型:问题和选择。
问题模型包括问题描述和发布时间。
选择模型包括选项描述和当前投票数。每个选项属于一个问题。
#民意调查/模型. py
从django.db导入模型
课堂提问(模型。型号):
question_text=models。CharField(max_length=200)
Pub_date=模型。DateTimeField(“发布日期”)
班级选择(车型。型号):
问题=模型。ForeignKey(Question,on_delete=models。级联)
选择_文本=模型CharField(max_length=200)
选票=模特。整数域(默认值=0)
创建模型,继承姜戈。db。模特。模型;每个模型有许多类变量,都表示模型里的一个数据表字段。
每个字段都是田类的实例。
说明:
姜戈可以为应用创建数据库表(创建表格)
姜戈可以创建与问题和选择对象进行交互的计算机编程语言数据库应用程序接口
三、激活模型
姜戈应用是"可插拔"的。
添加民意调查应用
#我的网站/设置。巴拉圭
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进行迁移
运行进行迁移命令姜戈会检测模型文件的修改,并且把修改的部分存储为一次迁移。迁移是姜戈对数据结构变化的一次存储。
移动是自动执行数据库迁移并同步管理数据库结构的命令。
因此,执行进行迁移之后,要想修改在数据库做出同步,需要再次执行python manage.py迁移。
迁移是非常强大的功能,能够在开发过程中持续的改变数据库结构而不需要删除表和重新创建表。
它专注于数据库平滑升级而不会丢失数据。
改变模型需要以下步骤:
编辑models.py文件,改变模型
运行python manage.py makemigrateions为模型的改变生成迁移文件
运行python manage.py迁移应用数据库迁移
四、初试应用程序接口
4.1 Django交互式命令的基本使用
进入姜戈交互式命令行:python manage.py shell
从民意调查。模型进口选择,问题
# 查看表问题表中的数据
Question.objects.all()
QuerySet [] #目前没有数据
从django.utils导入时区
# 创建一个问题数据对象
q=Question(question_text=有什么新消息?,pub_date=timezone.now())
# 存储数据对象到数据库
保存()
# 查看q对象属性
q.id
问。问题_正文
有什么新鲜事吗?
问。发布日期
datetime.datetime(2022,3,20,11,29,15,780052,tzinfo=datetime.timezone.utc)
# 修改q对象的属性
问题_文本=怎么了?
保存()
# 再次查看问题表中的数据
Question.objects.all()
查询集[问题:问题对象(1) ]
对于问题返回的显示数据,可以通过编辑问题模型代码进行修改,给问题和正在翻译增加__str__()方法。
课堂提问(模型。型号):
问题_文本=模型.CharField(max_length=200)
发布日期=模型。日期时间字段(发布日期)
def __str__(self):
返回自我.问题_正文
班级选择(车型。型号):
问题=模型ForeignKey(Question,on_delete=models .级联)
选择_文本=模型CharField(max_length=200)
选票=模特。整数域(默认值=0)
def __str__(self):
返回自我选择_text
再次进入姜戈交互式命令行:python manage.py shell
Question.objects.all()
查询集[问题:怎么了?]
4.2 给模型添加自定义方法
导入日期时间
从django.db导入模型
从django.utils导入时区
课堂提问(模型。型号):
问题_文本=模型.CharField(max_length=200)
发布日期=模型。日期时间字段(发布日期)
def __str__(self):
返回自我.问题_正文
定义已_发布_最近(自己):
回归自我。pub _ date=时区。now()-日期时间。时间增量(天数=1)
班级选择(车型。型号):
问题=模型ForeignKey(Question,on_delete=models .级联)
选择_文本=模型CharField(max_length=200)
选票=模特。整数域(默认值=0)
def __str__(self):
返回自我选择_text
再次进入姜戈交互式命令行:python manage.py shell
从投票。模型导入问题,选择
# 查看__str__()是否已生效
Question.objects.all()
查询集[问题:怎么了?]
#姜戈数据库API:过滤器
Question.objects.filter(id=1)
查询集[问题:怎么了?]
从django.utils导入时区
当前年份=timezone.now().年
Question.objects.get(发布日期_ _年=当前年份)
问:怎么了?
# 如果数据库中不存在数据,则会抛出异常
Question.objects.get(id=2)
回溯(最近一次呼叫):
模块中文件"输入"的第一行
经理_方法中文件" D:\ Codes \ media \ django \ code 001 \ venv \ lib \ site-packages \ django \ db \ models \ manager。py "的第85行
返回getattr(self。get _ query set(),name)(*args,**kwargs)
文件d:\ Codes \ media \ django \ code 001 \ venv \ lib \ site-packages \ django \ db \ models \ query。py 的第496行
raise self.model.DoesNotExist(
民意测验。模特。问题。不存在:匹配查询的问题不存在。
# 通过主键获取数据对象
Question.objects.get(pk=1)
问:怎么了?
q=Question.objects.get(pk=1)
# 使用models.py中自定义的方法
问:最近出版了吗()
# 查看q对象,外键所对应的对象
q.choice_set.all()
查询集[]
# 给q对象添加外键元素
q .选择集。创建(choice _ text=不多,票数=0)
选择:不多
q .选择集。create(choice _ text= The sky ,votes=0)
选择:天空
c=q . choice _ set。创建(choice _ text=只是再黑一次,票数=0)
# 查看c元素(选择对象)
选择:只是再次入侵
# 查看c元素的属性
问题
问:怎么了?
# 查看q对象,外键所对应的对象
q.choice_set.all()
查询集[选择:不多,选择:天空,选择:只是再黑一次]
q.choice_set.count()
Choice.objects.filter(问题_ _发布日期_ _年=当前年份)
查询集[选择:不多,选择:天空,选择:只是再黑一次]
c=q . choice _ set。过滤器(choice _ text _ _以=开头只是黑客行为)
# 删除c对象
删除()
(1,{ 民意测验。选择:1})
q.choice_set.all()
查询集[选择:不多,选择:天空]
五、强管理界面
管理界面不是为了网站的访问者,而是为管理者准备的。
5.1 创建一个管理员帐号
在命令行运行以下命令:python manage.py创建超级用户
之后会提示,输入用户名、邮箱、密码、确认密码。
python manage.py创建超级用户
用户名(留空以使用"管理员"):管理员
电子邮件地址:admin@example.com
密码:*****
密码(再次):*****
密码长度太短。密码必须包含至少8个字符。
这个密码太常见了。
密码只包含数字。
绕过密码验证并创建用户吗?[是/否]:是
超级用户创建成功。
5.2 登录管理界面
启动开发服务器:python manage.py runserver
打开浏览器:http://127.0.0.1:8000/admin/
输入帐号和密码,即可进入管理界面。
![登陆界面](https://s 2.51 CTO。com/images/blog/202207/01084014 _ 62be 426 e 24 E1 e 79373png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=登陆界面/resize,m_fixed,w_750)
![登陆后](https://s 2.51 CTO。com/images/blog/202207/01084014 _ 62be 426 e 3d 21 f 6068。png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=登陆后/resize,m_fixed,w_750)
5.3 向管理页面增加投票应用
#投票/管理。巴拉圭
来自姜戈. contrib导入管理
从。模型导入问题
管理员网站注册(问题)
![新增应用](https://s 2.51 CTO。com/images/blog/202207/01084014 _ 62be 426 e 2978940133。png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=新增应用/resize,m_fixed,w_750)
5.4 体验便捷的管理功能
点击页面中的按钮,即可使用增删改查功能。
六、PyCharm使用小技巧】
6.1 使用皮查姆的工具运行使迁移迁移
![创建命令](https://s 2.51 CTO。com/images/blog/202207/01084014 _ 62be 426 e 69 FFA 22440。png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=创建命令/resize,m_fixed,w_750)
6.2 使用皮查姆运行姜戈壳牌公司
在PyCharm的底部工具栏上,选择Python Console进入enter pythonmanage.pyshell。
先决条件:项目开始Django支持。
见:【Meeting Django】——(一)创建项目_CoderChaos的技术博客_博客支持启动项目。
四。[使用PyCharm的技巧]
相比通过python manage.py shell从终端进入Django shell,进入时会有一些提示。
七、最简单的美化Django Admin
7.1简单用户界面介绍
Django Admin默认的界面设计语言有一些缺点,比如颜色单一,大量线条的使用和明显的分割。把这些缺点归为界面单调、雷同明显、缺乏惊喜。
simple ui:django admin基于vue element-ui的现代主题。
GitHub地址:https://github.com/newpanjing/simpleui
7.2简单用户界面的使用
7.2.1安装
诗歌添加-D姜戈-简单
7.2.2开始使用
安装后,将simpleui添加到您自己项目的settings.py文件中INSTALLED_APPS的第一行。
# settings.py
INSTALLED_APPS=[
简单用户界面,
django.contrib.admin ,
django.contrib.auth ,
django.contrib.contenttypes ,
django.contrib.sessions ,
django.contrib.messages ,
django.contrib.staticfiles ,
民意测验
]
如果之前的服务还在运行,刷新页面即可。
![登陆页面](62be426e468298462.png https://s2.51cto.com/images/blog/202207/01084014?x-OSS-过程=图像/水印,size _ 14,text _ qduxq1rp5Y2A5A6I,color _ ffffff,t _ 30,g _ se,x _ 10,y _ 10,shadow _ 20,type _ zmfuz3pozw5nagvpdgk=登陆页/
![落地后页面](https://s2.51cto.com/images/blog/202207/01084014 _ 62be426E525211170.png?x-OSS-过程=图像/水印,size _ 14,text _ qduxq1rp5Y2A5A6I,color _ ffffff,t _ 30,g _ se,x _ 10,y _ 10,shadow _ 20,type _ zmfuz3pozw5nagvpdgk=登陆后页面/
简要介绍Django与数据库的连接和使用,以及默认后台管理界面的使用。
并使用PyCharm快速运行makemigrations migrate命令和django shell,使用django-simpleui美化默认后台管理界面。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。