一、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进阶的更多相关文章

  1. Django模型层-单表操作

    ORM介绍 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的 ...

  2. Django 模型层--单表

    ORM  简介 MTV或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这可以大大的减少了开 ...

  3. Django模型层之单表操作

    Django模型层之单表操作 一 .ORM简介 我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的管理操作(如增.删.改.查),而一旦谈到数据的管理操作,就需要用到数据库管理软 ...

  4. 第五章、Django之模型层---单表操作

    目录 第五章.Django之模型层---单表操作 一.ORM查询 二.Django测试环境搭建 三.单表查询 1. 增 2. 改 3. 删 4. 查 第五章.Django之模型层---单表操作 一.O ...

  5. day 69 Django基础五之django模型层(一)单表操作

    Django基础五之django模型层(一)单表操作   本节目录 一 ORM简介 二 单表操作 三 章节作业 四 xxx 一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现 ...

  6. day 55 Django基础五之django模型层(一)单表操作

      Django基础五之django模型层(一)单表操作   本节目录 一 ORM简介 二 单表操作 三 章节作业 四 xxx 一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它 ...

  7. {django模型层(二)多表操作}一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询、分组查询、F查询和Q查询

    Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 xxx 七 ...

  8. day 70 Django基础五之django模型层(二)多表操作

    Django基础五之django模型层(二)多表操作   本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 ORM ...

  9. day 56 Django基础五之django模型层(二)多表操作

    Django基础五之django模型层(二)多表操作   本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 ORM ...

  10. Django模型层(各种表及表数据的操作)

    目录 一.Django模型层 0. django模型层的级联关系 1. 配置django测试脚本 (1)方式一 (2)方式二 2. orm表数据的两种增删改 (1)方式一: (2)方式二: 3. pk ...

随机推荐

  1. node.js运行内存堆溢出的解决办法

    我是在将一组80多列13万多行的数据通过node-xlsx的时候出现的内存堆溢出的情况. 解决办法时将: node app.js 改成: node --max_old_space_size=10000 ...

  2. Java 代码快速注释 和 取消注释

    注释掉代码: 把要注释的代码选中: 加/* */ 形式的注释  ->  Ctrl+Shift+/ 加 //形式的形式的注释 ->  ctrl+/ 取消代码注释: 把要取消注释的代码选中: ...

  3. onethink多图上传

    模板处理, 可以参考 checkbox 的. 注:edit 方法的 基本一样,需要先把已有的数据展示出来,绑定双击事件,删除图片 需要先绑定给已经展示出来的图片, uploadPicture 的cal ...

  4. FFMPEG 常用命令行

    目录 1. 分离音视频 2. 解复用 3. 视频转码 4. 视频封装 5. 视频剪切 6. 视频录制 7.叠加水印 8.将MP3转换为PCM数据 9. 推送RTP流.接收RTP流并存为ts文件 10. ...

  5. javaweb期末项目-stage2-项目创建、配置、接口设计和功能实现(含核心源码)

    项目的创建.配置.接口设计和功能实现(含核心代码).rar--下载 说明:解压密码为袁老师的全名拼音(全小写) 相关链接: 项目结构:https://www.cnblogs.com/formyfish ...

  6. Fabric docker-compose volumes配置解析

    chaincode: container_name: chaincode image: hyperledger/fabric-ccenv tty: true environment: - GOPATH ...

  7. 【VS开发】MFC中调用C函数模块的解决方案

    [VS开发]MFC中调用C函数模块的解决方案 标签(空格分隔): [VS开发] 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:最近调试基于MFC的程序 ...

  8. 洛谷 题解 P1196 【[NOI2002]银河英雄传说】

    并查集大难题. 看了题解之后才有思路,调了很久很久才AC,当然要写一篇题解来纪念一下. 先来分析一下这些指令的特点,很容易发现对于每个M指令,只可能一次移动整个队列,并且是把两个队列首尾相接合并成一个 ...

  9. Cent7.2单用户模式

      1. 在进入系统时选择内核启动. 2. 按'e'进入编辑模式,找到带有内核的那一行. 3. 将ro(read only)改为rw init=/sysboot/bin/sh. 4. 按下ctrl+x ...

  10. c# 所有类型都是从object继承,那么值类型默认也有装箱吗?

    我们知道,c#所有类型都是从System.Object继承,int等值类型也逃脱不了这种命运,那难道值类型默认有装箱操作吗?答案是否,在CLR via这本书中有简短的解释说明: 1.值类型从Syste ...