第二十章 Django数据库实战
第二十章 Django数据库实战
第一课 获取单表单数据的三种方式:
urls.py中的路由代码:
path('busniess',views.busniess),
views.py中代码:
def busniess(req):
v1=models.busniess.objects.all()
print('v1:',v1)#是对象
v2=models.busniess.objects.all().values('id','caption')
print('v2:',v2)#是字典
v3=models.busniess.objects.values_list('id','caption')
print('v3',v3)
return render(req,'busniess.html',{'v1':v1,'v2':v2,'v3':v3})
Template目录下创建busniess.html文件,代码:
<ul>
{% for i in v1 %}
<li>{{ i.id }}-{{ i.caption }}-{{ i.code }}</li>
{% endfor %}
</ul>
<ul>
{% for i in v2 %}
<li>{{ i.id }}-{{ i.caption }}</li>
{% endfor %}
</ul>
<ul>
{% for i in v3 %}
<li>{{ i.0 }}-{{ i.1 }}</li>
{% endfor %}
</ul>
浏览器访问URL:http://127.0.0.1:8000/app02/busniess
首页显示:
1-运维-aa
2-销售-bb
3-开发-cc
4-渠道-dd
1-运维
2-销售
3-开发
4-渠道
1-运维
2-销售
3-开发
4-渠道
运行输出:
v1: <QuerySet [<busniess: busniess object (1)>, ...]>
v2: <QuerySet [{'id': 1, 'caption': '运维'},...]>
v3 <QuerySet [(1, '运维'), (2, '销售'), (3, '开发'), (4, '渠道')]>
第二课 一对多跨表操作
获取一对多表单数据:
1.建立两张表,一张主键表busniess,一张参照表host,Models.py中代码:
class busniess(models.Model):
caption=models.CharField(max_length=64)
code=models.CharField(max_length=32)
class Host(models.Model):
uid=models.AutoField(primary_key=True)
hostname=models.CharField(max_length=32,db_index=True)
ip=models.GenericIPAddressField(protocol='ipv4',db_index=True)
port=models.IntegerField()
b=models.ForeignKey(to='busniess',to_field='id',on_delete=models.CASCADE)
2.在命令行下执行创建完毕:
python manage.py makemigrations
python manage.py migrate
3.在两张表中自定义一些数据。
4.在urls.py中加入路径:path('host',views.host),
5.在views.py中代码:
def host(req):
v1=models.Host.objects.filter(uid__gt=0)
for row in v1:
print(row.uid,row.hostname,row.ip,row.port,row.b_id,row.b)
return HttpResponse('host')
6.浏览器访问:http://127.0.0.1:8000/app02/host 触发函数
7.后台输出:
1 c1.com 1.1.1.1 9900 1 busniess object (1)
2 c2.com 1.1.1.2 8800 1 busniess object (1)
3 c3.com 1.1.1.3 7700 2 busniess object (2)
8.修改5中代码:
def host(req):
v1=models.Host.objects.filter(uid__gt=0)
for row in v1:
print(row.uid,row.hostname,row.ip,row.port,row.b_id,row.b.id,row.b.caption)
return HttpResponse('host')
9.后台输出:
1 c1.com 1.1.1.1 9900 1 1 运维
2 c2.com 1.1.1.2 8800 1 1 运维
3 c3.com 1.1.1.3 7700 2 2 销售
10. <td>{{ forloop.counter}}</td> 可用于添加序号
第三课 创建多对多以及增加示例
1.创建多对多:
方式一:自定义关系表
class Host(models.Model):
uid=models.AutoField(primary_key=True)
hostname=models.CharField(max_length=32,db_index=True)
ip=models.GenericIPAddressField(protocol='ipv4',db_index=True)
port=models.IntegerField()
b=models.ForeignKey(to='busniess',to_field='id',on_delete=models.CASCADE)
class Application(models.Model):
name=models.CharField(max_length=32)
class HostToApplication(models.Model):
hobj=models.ForeignKey(to='Host',to_field='uid',on_delete=models.CASCADE)
aobj=models.ForeignKey(to='Application',to_field='id',on_delete=models.CASCADE)
方式二:自动创建关系表:
class Host(models.Model):
uid=models.AutoField(primary_key=True)
hostname=models.CharField(max_length=32,db_index=True)
ip=models.GenericIPAddressField(protocol='ipv4',db_index=True)
port=models.IntegerField()
b=models.ForeignKey(to='busniess',to_field='id',on_delete=models.CASCADE)
class Application(models.Model):
name=models.CharField(max_length=32)
r=models.ManyToManyField('Host')
#无法直接对第三张表进行操作 obj.r.all()
第二十章 Django数据库实战第一课 获取单表单数据的三种方式:urls.py中的路由代码:path('busniess',views.busniess),views.py中代码:def busniess(req):v1=models.busniess.objects.all()print('v1:',v1)#是对象v2=models.busniess.objects.all().values('id','caption')print('v2:',v2)#是字典v3=models.busniess.objects.values_list('id','caption')print('v3',v3)return render(req,'busniess.html',{'v1':v1,'v2':v2,'v3':v3})Template目录下创建busniess.html文件,代码:<ul>{% for i in v1 %}<li>{{ i.id }}-{{ i.caption }}-{{ i.code }}</li>{% endfor %}</ul><ul>{% for i in v2 %}<li>{{ i.id }}-{{ i.caption }}</li>{% endfor %}</ul><ul>{% for i in v3 %}<li>{{ i.0 }}-{{ i.1 }}</li>{% endfor %}</ul>浏览器访问URL:http://127.0.0.1:8000/app02/busniess首页显示:1-运维-aa2-销售-bb3-开发-cc4-渠道-dd1-运维2-销售3-开发4-渠道1-运维2-销售3-开发4-渠道运行输出:v1: <QuerySet [<busniess: busniess object (1)>, ...]>v2: <QuerySet [{'id': 1, 'caption': '运维'},...]>v3 <QuerySet [(1, '运维'), (2, '销售'), (3, '开发'), (4, '渠道')]>第二课 一对多跨表操作获取一对多表单数据:1.建立两张表,一张主键表busniess,一张参照表host,Models.py中代码:class busniess(models.Model):caption=models.CharField(max_length=64)code=models.CharField(max_length=32)class Host(models.Model):uid=models.AutoField(primary_key=True)hostname=models.CharField(max_length=32,db_index=True)ip=models.GenericIPAddressField(protocol='ipv4',db_index=True)port=models.IntegerField()b=models.ForeignKey(to='busniess',to_field='id',on_delete=models.CASCADE)2.在命令行下执行创建完毕:python manage.py makemigrationspython manage.py migrate3.在两张表中自定义一些数据。4.在urls.py中加入路径:path('host',views.host),5.在views.py中代码:def host(req):v1=models.Host.objects.filter(uid__gt=0)for row in v1:print(row.uid,row.hostname,row.ip,row.port,row.b_id,row.b)return HttpResponse('host')6.浏览器访问:http://127.0.0.1:8000/app02/host 触发函数7.后台输出:1 c1.com 1.1.1.1 9900 1 busniess object (1)2 c2.com 1.1.1.2 8800 1 busniess object (1)3 c3.com 1.1.1.3 7700 2 busniess object (2)8.修改5中代码:def host(req):v1=models.Host.objects.filter(uid__gt=0)for row in v1:print(row.uid,row.hostname,row.ip,row.port,row.b_id,row.b.id,row.b.caption)return HttpResponse('host')9.后台输出:1 c1.com 1.1.1.1 9900 1 1 运维2 c2.com 1.1.1.2 8800 1 1 运维3 c3.com 1.1.1.3 7700 2 2 销售10. <td>{{ forloop.counter}}</td> 可用于添加序号
第三课 创建多对多以及增加示例1.创建多对多:方式一:自定义关系表class Host(models.Model):uid=models.AutoField(primary_key=True)hostname=models.CharField(max_length=32,db_index=True)ip=models.GenericIPAddressField(protocol='ipv4',db_index=True)port=models.IntegerField()b=models.ForeignKey(to='busniess',to_field='id',on_delete=models.CASCADE)class Application(models.Model):name=models.CharField(max_length=32)class HostToApplication(models.Model):hobj=models.ForeignKey(to='Host',to_field='uid',on_delete=models.CASCADE)aobj=models.ForeignKey(to='Application',to_field='id',on_delete=models.CASCADE)方式二:自动创建关系表:class Host(models.Model):uid=models.AutoField(primary_key=True)hostname=models.CharField(max_length=32,db_index=True)ip=models.GenericIPAddressField(protocol='ipv4',db_index=True)port=models.IntegerField()b=models.ForeignKey(to='busniess',to_field='id',on_delete=models.CASCADE)class Application(models.Model):name=models.CharField(max_length=32)r=models.ManyToManyField('Host')#无法直接对第三张表进行操作 obj.r.all()
第二十章 Django数据库实战的更多相关文章
- python 教程 第二十章、 数据库编程
第二十章. 数据库编程 环境设置 1).安装MySQL-python http://www.lfd.uci.edu/~gohlke/pythonlibs/ MySQL-python-1.2.3.win ...
- 2017.3.14 activiti实战--第二十章--REST服务
学习资料:<Activiti实战> 第二十章 REST服务 20.1 通信协议概述 略. 20.2 REST API概述 资源分类 资源基础URI 说明 Deployments manag ...
- Python之路【第十九章】:Django 数据库对象关系映射
Django ORM基本配置 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去 ...
- Django高级实战 开发企业级问答网站完整
资源获取链接点击这里 Django高级实战 开发企业级问答网站 从实际需求分析开始,实现当今主流知识问答应用的功能,包括动态.文章.问答.私信.消息通知.搜索.个人中心,打造企业级知识问答网站,由此全 ...
- Django 数据库常见操作
首先要配置数据映射具体在这个连接里 https://www.cnblogs.com/Niuxingyu/p/10296143.html Django 建立数据库模型 #导包导入django数据库类 f ...
- Django高级实战 开发企业级问答网站 ✌✌
Django高级实战 开发企业级问答网站 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 从实际需求分析开始,实现当今主流知识问答应用的功能,包括动态.文章.问 ...
- Django高级实战 开发企业级问答网站✍✍✍
Django高级实战 开发企业级问答网站 1. 创建项目与app 创建项目 django-admin startproject firstsite 创建app python manage.py sta ...
- Django 数据库访问性能优化
使用标准的数据库优化技术: 在进行Django数据库访问性能优化之前,首先应该使用标准的数据库技术对其进行优化,比如给字段加索引,通过使用 django.db.models.Field.db_inde ...
- 从命令行运行django数据库操作
从命令行运行django数据库操作,报错: django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_T ...
随机推荐
- 频繁更换ip会影响SEO优化吗?
网站更换ip会不影响SEO的效果,其实网站更换ip是正常的(但不能频繁更换),搜索引擎抓取是根据网站的域名进行的,不是根据ip来抓取你的网站.在短时间内更换IP对SEO的效果并没有很大的影响. 如果是 ...
- 针对php脚本文件执行锁定的代码,避免脚本在同一时间重复运行
<?php//针对php脚本文件执行锁定的代码,避免脚本在同一时间重复运行,http://ken.01h.net/define('PHP_LOCK_FILE', dirname(__FILE__ ...
- Django 类方式view进行进行用户验证
问题: Django中,view的书写方式有两种,一种是def函数方式,一种是class方式,函数方式通过@login_required装饰器标记函数,就必须通过用户验证,而类,则没办法通过此方法进行 ...
- j2e应用概述
过年也过完了,现在正式开始进入j2e的整理.现在开篇第一篇,整理一下j2e应用和开发环境.j2e应用提供的跨平台性,开放性已经各种远程访问的技术,为异构系统的良好整合提供了保证.注意这个是有一个异构系 ...
- android软键盘的显示和隐藏
显示: InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); imm.toggle ...
- java编码GBK的不可映射字符
编译java文件时,提示编码GBK的不可映射字符. 主要原因:windows 默认编码方式为GBK,用javac编译时,中文按照GBK解析,但是文件内容编码格式不是GBK. 解决:若编译单个文件指定编 ...
- java SimpleDateFormat日期与时间戳的相互转换
自我总结,有什么不到位的地方,各位可以帮忙纠正补充一下,感激不尽! 目的:SimpleDateFormat类可以很随意的组合日期时间的格式,不止单纯的yyyy-MM-dd这种格式 废话不多说,上代码 ...
- java类加载时执行顺序
源代码 class HelloA { public HelloA() { System.out.print("A"); } { System.out.print("B&q ...
- iOS-CYLTabBarController【好用的TabbarController】
用TabbarController进行模块分类和管理,这里推荐一个CYLTabBarController,只需两个数组就可以使用和管理: 1.导入CYLTabBarController 使用cocoa ...
- HDU 5608 function [杜教筛]
HDU 5608 function 题意:数论函数满足\(N^2-3N+2=\sum_{d|N} f(d)\),求前缀和 裸题-连卷上\(1\)都告诉你了 预处理\(S(n)\)的话反演一下用枚举倍数 ...