Django模型层:单表操作,多表操作,常用(非常用)字段和参数,Django-model进阶
一、web应用
二、模板的导入与继承
三、静态文件相关
四、inclusion_tag:返回html片段
五、模型层
一、web应用
-s包括两个部分:web服务器+application
-目前阶段django项目用的web服务器是:wsgiref+application
-上线会用uwsgi+application
-web服务器(本质是socket)都实现了wsgi协议
-wsgi:web服务网关接口,是一个协议
二、模板的导入与继承
如何引入静态文件(static目录的配置):
在setting.py文件中配置:
# STATICFILES_DIRS名字必须叫它
STATICFILES_DIRS=[
os.path.join(BASE_DIR,'static'),
]
模板的导入:
1.写一个好看的模板
<div>
<div class="panel panel-primary">
<div class="panel-heading">同城交友</div>
<div class="panel-body">
联系电话:{{ a }}
</div>
</div> <div class="panel panel-danger">
<div class="panel-heading">
<h3 class="panel-title">潮流社区</h3>
</div>
<div class="panel-body">
网站是: <a href="http://www.baidu.com">点我</a>
</div>
</div>
</div>
2.用在想用的地方
{% include '模板的名字.html' %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.css' %}">
<link rel="stylesheet" href="{% get_static_prefix %}bootstrap-3.3.7-dist/css/bootstrap.css">
{# <link rel="stylesheet" href="/statc999/">#} <title>Title</title>
<style>
.head {
height: 60px;
background: #1b6d85;
}
</style>
</head>
<body>
<div class="head"></div>
<div class="container-fluid">
<div class="row">
<div class="col-md-3">
{% include 'good.html' %} </div>
<div class="col-md-9"> </div>
</div>
</div>
</body>
</html>
模板的继承
-写一个母版,base.html(留一些block(盒子)),留的盒子越多,可扩展性就越高
{% block top %}
{% endblock %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.css' %}">
<link rel="stylesheet" href="{% get_static_prefix %}bootstrap-3.3.7-dist/css/bootstrap.css">
{# <link rel="stylesheet" href="/statc999/">#}
{% block top %} {% endblock %}
<title>Title</title>
<style>
.head {
height: 60px;
background: #1b6d85;
}
</style>
</head>
<body>
<div class="head"></div>
<div class="container-fluid">
<div class="row">
<div class="col-md-3">
{% include 'good.html' %}
{% block left %} {% endblock %}
</div>
<div class="col-md-9">
{% block content %}
<h1>我是母版的内容</h1>
{% endblock %}
</div>
</div>
</div>
</body>
</html>
使用:
-在一个新的html中
{% extend ’base.html‘ %}
扩写留的对应的盒子
{% block top %}
扩写的额内容
{% endblock %}
{% extends 'base.html' %}
{% block left %}
我是首页的内容
<h1>我是index的h1标签</h1>
我是首页的内容
{% endblock %}
{% block content %}
{{ block.super }}
<h1>我是index的内容</h1>
{{ block.super }}
{% load my_tag %}
{% lqz 5 'egon' %}
{% endblock %}
index.html案例
{% extends 'base.html' %}
{% block content %}
我是订单的内容
<h1>我是order的h1</h1>
<div>
{% load my_tag %}
{% mytest 50 'lqz' %}
</div>
{% endblock %}
{% block top %}
<link rel="stylesheet" href="/static/css/order.css">
{% endblock %}
order.html案例
注意:
1.扩写的时候,盒子的位置无所谓,只要名字对应正确,就会正确填充
2.盒子可以不扩写,不谢就是原来的样子
3.如果要写实模板盒子中原来的东西,需要
{{ block.super }} --- 写在哪,原来的内容就放在哪
三、静态文件相关
1.直接写死的:<link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
2.用script标签:
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.css' %}">
3.用get_stasic_prefix:
{% load static %}
<link rel="stylesheet" href="{% 用get_static_prefix %}bootstrap-3.3.7-dist/css/bootstrap.css">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.css' %}">
<link rel="stylesheet" href="{% get_static_prefix %}bootstrap-3.3.7-dist/css/bootstrap.css">
{# <link rel="stylesheet" href="/statc999/">#}
{% block top %} {% endblock %}
<title>Title</title>
<style>
.head {
height: 60px;
background: #1b6d85;
}
</style>
</head>
四、inclusion_tag:返回html片段
1.前面几部跟标签和过滤器一样,在app创建templatetags文件夹创建my_tag.py文件
2.装饰器:@register.inclusion_tag('inclusion.html',name='lqz'),第一个参数是要操作的模板
from django.template import Library
register=Library() @register.inclusion_tag('inclusiontag.html',name='lqz')
def mytest(value,value2):
ll= [ i for i in range(value)]
return {'ll':ll,'a':value2}
3.返回一个字典,字典中的值,可以在inclusion中使用
4.使用:
{%load 你写的那个py文件 %}
{% 函数名字 参数 参数 %}
五、模型层
单表操作
-增加、删除、改:两种方式:queryset对象的方法,book对象的方法
-改:需要的save()
-get()方法:查询的数据有且只有一条,如果多,少都会跑出异常
单表查询
-<1> all(): 查询所有结果
<2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象
<3> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。
<4> exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象
<5> order_by(*field): 对查询结果排序('-id')
<6> reverse(): 对查询结果反向排序
<8> count(): 返回数据库中匹配查询(QuerySet)的对象数量。
<9> first(): 返回第一条记录
<10> last(): 返回最后一条记录
<11> exists(): 如果QuerySet包含数据,就返回True,否则返回False
<12> values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,而是一个可迭代的字典序列
<13> values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
<14> distinct(): 从返回结果中剔除重复纪录
单表基于双下划线的查询
Book.objects.filter(price__in=[100,200,300])
Book.objects.filter(price__gt100)
Book.objects.filter(price__lt=100)
Book.objects.filter(price__gte=100)
Book.objects.filter(price__lte=100)
Book.objects.filter(price__range=[100,200])
Book.objects.filter(title__contains="python")
Book.objects.filter(title__icontains="python")
Book.objects.filter(title__startswith="py")
Book.objects.filter(pub_date__year=2012)
import os
if __name__ == '__main__':
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day81.settings")
import django
django.setup()
from app01 import models
# 单表的增加两种
# date类型,传的时候,可以传字符串(格式必须是:2018-06-17),可以传时间对象
# ret=models.Book.objects.create(name='洪流吗',price=23.7,publish='北京出版社',pub_data='2018-06-17')
# import datetime
# ctime=datetime.datetime.now()
# ret=models.Book.objects.create(name='西游记',price=45.9,publish='南京出版社',pub_data=ctime)
# 生成对象,再调save方法
# book=models.Book(name='三国演义',price=46.89,publish='南京出版社',pub_data='2017-08-17')
# book.save() # 删除(pk代指主键)
# ret=models.Book.objects.filter(pk=1).delete()
# book=models.Book.objects.filter(pk=1).first()
# book.delete() #更新
# ret = models.Book.objects.filter(pk=2).update(name='ddd')
# book=models.Book.objects.filter(pk=2).first()
# book.name='XXX'
# # 没有update这个方法的
# # book.update()
# # 既可以保存,又可以更新
# book.save() # get方法
# book = models.Book.objects.filter(pk=2).first()
# book拿到的是 book对象
# get查到的数据有且只有一条
# book=models.Book.objects.get(name='XXX')
# book=models.Book.objects.get(name='三国演义')
# print(book.name) # 查询的api(方法)
# exclude(并列条件必须同时满足,也就是and)
# book=models.Book.objects.exclude(name='三国演义',price=44)
# # 必须是queryset对象才有query,它就是原生的sql
# print(book.query)
# 如何定义一个支持链式操作的类(每个方法返回的时候,返回对象本身) # 按价格升序排列
# book=models.Book.objects.all().order_by('price')
# 倒序排列
# book = models.Book.objects.all().order_by('-price')
# print(book.query)
# # 必须有排序规则(在order_by之后用)才能调用reverse方法
# book = models.Book.objects.all().order_by('price').reverse()
# book = models.Book.objects.all().reverse()
# print(book.query)
# book=models.Book.objects.all().filter(name='偶露菲').count()
# book=models.Book.objects.all().count()
# book=models.Book.objects.all().first()
# print(book)
# book=models.Book.objects.all().last()
# queryset 可以按索引取值,但是不支持负索引 # 可以支持切片,其实sql就改了
# book = models.Book.objects.all()[10:15]
# book=models.Book.objects.all().filter(name='xx').exists()
# values :返回结果是queryset对象,里面套字典
# book=models.Book.objects.all().values('name')
# for i in book:
# print(i.get('name'))
# print(i['price'])
# values :返回结果是queryset对象,里面套元组
# book=models.Book.objects.all().values_list('name','price')
# book=models.Book.objects.all().values('price').distinct() # 基于双下划线的模糊查询
# 在列表范围内
# book=models.Book.objects.filter(price__in=[44,45])
# print(book.query)
# 大于
# book = models.Book.objects.filter(price__gt=44)
# 大于等于
# book = models.Book.objects.filter(price__gte=44)
# 小于
# book = models.Book.objects.filter(price__lt=44)
# print(book)
# # 小于等于
# book = models.Book.objects.filter(price__lte=45)
# 在40--50之间
# book=models.Book.objects.filter(price__range=[40,50])
# print(book.query)
# 包含 python
# book = models.Book.objects.filter(name__contains='python')
# 不区分大小写的包含
# book = models.Book.objects.filter(name__icontains='python')
# print(book.query)
# 以XX开通
# book=models.Book.objects.filter(name__istartswith='X')
# print(book.query)
# print(book)
# book=models.Book.objects.filter(name__endswith='义')
# print(book.query)
# book=models.Book.objects.filter(pub_data__year='2017')
# book=models.Book.objects.filter(pub_data__month='01')
# book=models.Book.objects.filter(pub_data__day='11')
book=models.Book.objects.filter(pub_data__year='',pub_data__month='') print(book.query)
print(book)
Django模型层:单表操作,多表操作,常用(非常用)字段和参数,Django-model进阶的更多相关文章
- Django模型层-单表操作
ORM介绍 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的 ...
- Django 模型层--单表
ORM 简介 MTV或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这可以大大的减少了开 ...
- Django模型层之单表操作
Django模型层之单表操作 一 .ORM简介 我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的管理操作(如增.删.改.查),而一旦谈到数据的管理操作,就需要用到数据库管理软 ...
- 第五章、Django之模型层---单表操作
目录 第五章.Django之模型层---单表操作 一.ORM查询 二.Django测试环境搭建 三.单表查询 1. 增 2. 改 3. 删 4. 查 第五章.Django之模型层---单表操作 一.O ...
- day 69 Django基础五之django模型层(一)单表操作
Django基础五之django模型层(一)单表操作 本节目录 一 ORM简介 二 单表操作 三 章节作业 四 xxx 一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现 ...
- day 55 Django基础五之django模型层(一)单表操作
Django基础五之django模型层(一)单表操作 本节目录 一 ORM简介 二 单表操作 三 章节作业 四 xxx 一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它 ...
- {django模型层(二)多表操作}一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询、分组查询、F查询和Q查询
Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 xxx 七 ...
- day 70 Django基础五之django模型层(二)多表操作
Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 ORM ...
- day 56 Django基础五之django模型层(二)多表操作
Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 ORM ...
- Django模型层(各种表及表数据的操作)
目录 一.Django模型层 0. django模型层的级联关系 1. 配置django测试脚本 (1)方式一 (2)方式二 2. orm表数据的两种增删改 (1)方式一: (2)方式二: 3. pk ...
随机推荐
- node.js运行内存堆溢出的解决办法
我是在将一组80多列13万多行的数据通过node-xlsx的时候出现的内存堆溢出的情况. 解决办法时将: node app.js 改成: node --max_old_space_size=10000 ...
- Java 代码快速注释 和 取消注释
注释掉代码: 把要注释的代码选中: 加/* */ 形式的注释 -> Ctrl+Shift+/ 加 //形式的形式的注释 -> ctrl+/ 取消代码注释: 把要取消注释的代码选中: ...
- onethink多图上传
模板处理, 可以参考 checkbox 的. 注:edit 方法的 基本一样,需要先把已有的数据展示出来,绑定双击事件,删除图片 需要先绑定给已经展示出来的图片, uploadPicture 的cal ...
- FFMPEG 常用命令行
目录 1. 分离音视频 2. 解复用 3. 视频转码 4. 视频封装 5. 视频剪切 6. 视频录制 7.叠加水印 8.将MP3转换为PCM数据 9. 推送RTP流.接收RTP流并存为ts文件 10. ...
- javaweb期末项目-stage2-项目创建、配置、接口设计和功能实现(含核心源码)
项目的创建.配置.接口设计和功能实现(含核心代码).rar--下载 说明:解压密码为袁老师的全名拼音(全小写) 相关链接: 项目结构:https://www.cnblogs.com/formyfish ...
- Fabric docker-compose volumes配置解析
chaincode: container_name: chaincode image: hyperledger/fabric-ccenv tty: true environment: - GOPATH ...
- 【VS开发】MFC中调用C函数模块的解决方案
[VS开发]MFC中调用C函数模块的解决方案 标签(空格分隔): [VS开发] 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:最近调试基于MFC的程序 ...
- 洛谷 题解 P1196 【[NOI2002]银河英雄传说】
并查集大难题. 看了题解之后才有思路,调了很久很久才AC,当然要写一篇题解来纪念一下. 先来分析一下这些指令的特点,很容易发现对于每个M指令,只可能一次移动整个队列,并且是把两个队列首尾相接合并成一个 ...
- Cent7.2单用户模式
1. 在进入系统时选择内核启动. 2. 按'e'进入编辑模式,找到带有内核的那一行. 3. 将ro(read only)改为rw init=/sysboot/bin/sh. 4. 按下ctrl+x ...
- c# 所有类型都是从object继承,那么值类型默认也有装箱吗?
我们知道,c#所有类型都是从System.Object继承,int等值类型也逃脱不了这种命运,那难道值类型默认有装箱操作吗?答案是否,在CLR via这本书中有简短的解释说明: 1.值类型从Syste ...