第二十章 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数据库实战的更多相关文章

  1. python 教程 第二十章、 数据库编程

    第二十章. 数据库编程 环境设置 1).安装MySQL-python http://www.lfd.uci.edu/~gohlke/pythonlibs/ MySQL-python-1.2.3.win ...

  2. 2017.3.14 activiti实战--第二十章--REST服务

    学习资料:<Activiti实战> 第二十章 REST服务 20.1 通信协议概述 略. 20.2 REST API概述 资源分类 资源基础URI 说明 Deployments manag ...

  3. Python之路【第十九章】:Django 数据库对象关系映射

    Django ORM基本配置 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去 ...

  4. Django高级实战 开发企业级问答网站完整

    资源获取链接点击这里 Django高级实战 开发企业级问答网站 从实际需求分析开始,实现当今主流知识问答应用的功能,包括动态.文章.问答.私信.消息通知.搜索.个人中心,打造企业级知识问答网站,由此全 ...

  5. Django 数据库常见操作

    首先要配置数据映射具体在这个连接里 https://www.cnblogs.com/Niuxingyu/p/10296143.html Django 建立数据库模型 #导包导入django数据库类 f ...

  6. Django高级实战 开发企业级问答网站 ✌✌

    Django高级实战 开发企业级问答网站 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 从实际需求分析开始,实现当今主流知识问答应用的功能,包括动态.文章.问 ...

  7. Django高级实战 开发企业级问答网站✍✍✍

    Django高级实战 开发企业级问答网站 1. 创建项目与app 创建项目 django-admin startproject firstsite 创建app python manage.py sta ...

  8. Django 数据库访问性能优化

    使用标准的数据库优化技术: 在进行Django数据库访问性能优化之前,首先应该使用标准的数据库技术对其进行优化,比如给字段加索引,通过使用 django.db.models.Field.db_inde ...

  9. 从命令行运行django数据库操作

    从命令行运行django数据库操作,报错: django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_T ...

随机推荐

  1. junit测试延伸--方法的重复测试

    在实际编码测试中,我们有的时候需要对一个方法进行多次测试,那么怎么办呢?这个问题和测试套件解决的方案一样,我们总不能不停的去右键run as,那怎么办呢?还好伟大的junit帮我们想到了. OK,现在 ...

  2. Linux指令--df,du

    linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 1.命令格式: df [选项] [文件] 2.命 ...

  3. Matlab产生TestBeach所需要的波形数据

    在用vivado仿真的时候,很多情况下需要自己产生波形来代替AD采样波形.以前的做法都是用DDS内部产生所需要的波形来模仿外部输入,后来发现这种做法不仅麻烦,而且不易修改,对仿真很不友好.于是改用ma ...

  4. C# TCP 了解

    参考:http://www.jb51.net/article/118682.htm 一: TCP 粘包原理:发送方发送若干数据给接收方时粘成一包.从接收缓冲区看,后一包的头紧接前一包的数据的尾. 发送 ...

  5. mybatis-spring最新版下载地址

    mybatis-spring最新版下载地址: http://mvnrepository.com/artifact/org.mybatis/mybatis-spring/1.2.3 mybatis-sp ...

  6. 在VMware中安装ubuntu

    如果想在自己设置它的属性,比如时区,语言支持之类的,在开机时按[enter], 否则就是默认的设置了,英文语言,而且还不好调.

  7. 手把手的SpringBoot教程,SpringBoot创建web项目(一)

    1.引子 大家好,在接下里的半个多小时,我会给大家详细的介绍SpringBoot的基本使用,相信学完这门课程以后,你会对SpringBoot有一个清晰的认识,并且能够运用这门比较新颖的技术开发一些小程 ...

  8. php 把驼峰样式的字符串转换成下划线样式的字符串

    1.如何在php中把驼峰样式的字符串转换成下划线样式的字符串.例:输入是FooBar的话,输出则是foo_bar 以下是用正则的方式去完成,既然用到正则,方法肯定就不只一种,我们看下下面的方式 ech ...

  9. iOS-PYSearch 完美搜索页

    APP搜索页基本上是少不了的,热门搜索.搜索记录等:这里推荐一个大牛ko1o写的:PYSearch,他还有一个不错的图片浏览开源:PYPhotoBrowser:这个也不错,感兴趣的可以了解下:下面说下 ...

  10. ABP官方文档翻译 6.1.1 MVC控制器

    ASP.NET MVC控制器 介绍 AbpController基类 本地化 其他 过滤器 异常处理和结果包装 审计日志 验证 授权 工作单元 介绍 ABP通过Abp.Web.Mvc nuget包集成到 ...