django目录下的路由系统和视图函数
一、Django路由系统(url)
1、什么是路由系统
路由系统的本质是URL模式以及要为该URL模式调用的视图函数之间的一个映射表即不同的url路径对应的不同的函数,该路由系统是存放在全局配置文件urls.py中,之所以叫路由系统是为了好听
2、路由系统格式:
urlpatterns = [url(正则表达式, views视图函数,参数,别名),]

urlpatterns = [url(正则表达式,include(分发的文件路径),] urlpatterns = [ url(r'^blog/', include('blog.urls')),]2、通过路径传递参数
5、客户端向服务器端发送请求的方式:
render():主要是做模板渲染用的 redirect("路径"):主要是页面跳转用的 直接将函数中所有的变量传给模板 redirect走的是路径,页面跳转路径重新加载
render返回的是模板,只是返回一个页面,路径不会重新加载。
三、Template基础 (模板系统)
{% %} {{obj|filter:param}} obj为要操作的对象,filter为具体的操作方法,param为要做的值 filter所指代的具体操作方法:
1、add : 给obj变量加上相应的值,主要用于数字的相加 obj变量中的引号前加上斜线 obj首字母大写,主要是对字符串进行设置 obj字符串中移除指定的字符 比如说是移除obj中的空格 eg:#value4=datetime.datetime.now()
{{ value4|date:'Y-m-d' }} 以年-月-日的方式访问
6、 default : 如果值是False,就替换成设置的默认值,否则就是用本来的值
eg:{{ i|truncatewords:4}}
{% with total=fhjsaldfhjsdfhlasdfhljsdal %} {{ total }} {% endwith %} {% verbatim %} {{ hello }}
{% endverbatim %}

格式:{% block x % } y {% endblock %} 其中x代表盒子的名称,必须与后端替换的盒子名称一样,y代表需要替换的内容
4、在子模板中创建母版内一样的盒子,然后在其里面写入你想要替换的代码就可以了
四、Models数据库
1、 django默认支持sqlite,mysql, oracle,postgresql数据库,但是在测试环境默认选择使用的是sqlite数据库







方式3:一对多查询之正反向查询(通过x_set的方式就可以实现反向查询,x指代的是外键名称)
1、正向查询:
外键表名称.objects.filter(过滤条件).first().外键字段名称.非外键表字段()
2、反向查询:
非外键表名称.objects.filter(过滤条件).last().外键表名__set.外键字段名()

补充:反向查询得到的是个集合对象,而正向查询得到的是个对象。
了不起的双下划线之单表查询
eg:表名.objects.filter(id__lt=10, id__gt=1) 获取id大于1 且 小于10的值
表名.objects.filter(id__in=[11, 22, 33]) 获取id等于11、22、33的数据
表名.objects.exclude(id__in=[11, 22, 33]) 获取id不在列表内的数据,而not in是与之相反
表名.objects.filter(name__contains="x") 获取包含x字段的数据,
表名.objects.filter(name__icontains="ven") 获取不区分大小写的数据
表名.objects.filter(id__range=[x, y]) 获取id在x到y范围内的数据
范围bettwen and 、 startswith、istartswith、endswith、 iendswith,
了不起的双下划线(__)之多表条件关联查询
正向查找(条件)之一对多
格式:外键表名.objects.filter(过滤条件).values("外键名称__非外键字段名")
正向查找(条件)之多对多
格式:外键表名.objects.filter(过滤条件).values("外键名称__非外键字段名")
反向查找(条件)
反向查找之一对多
格式:非外键表名.objects.filter(外键表名__外键字段="外键字段值").values("非外键字段名")
反向查找之多对多:
格式:非外键表名.objects.filter(外键表名__外键字段="外键字段值").values("非外键字段名")
总结: 正向查找是先查表,查到的是个列表对象,然后再再连表,反向查找是先连表,连到的是个列表对象,然后再查表,查表是既可以查自己表中字段也可以查对端表中字段

1、聚合查询 (aggregate),返回的是个字典形式的值
1、首先导入相应模板:from django.db.models import Avg,Min,Sum,Max
2、格式:表名称.objects.[filter(过滤条件)].aggregate([x=]Avg('字段名')) 结果为: {x:值}
注释:x指代的是个得到的结果的key键的名称,如果不填写就自动写字段名作为key名称
3、格式:表名称.objects.filter(过滤条件).aggregate([x=]Avg('字段名1'),([x=]Min('字段名2'),([x=]Max('字段名3'))
注释:如果想求多个值就可以用逗号隔开,得到的结果是个字典形式的集合,过滤条件既可以是正向查找也可以是反向查找,还可以
ge:

2、分组查询( annotate())
注释:x指代的是个得到的结果的key键的名称,如果不填写就自动写字段名作为key名称
3、格式:表名称.objects.[filter(过滤条件)].values(过滤条件).aggregate(([x=]Avg('字段名1'),([x=]Min('字段名2'),)
注释:如果想求多个值就可以用逗号隔开,得到的结果是个字典形式的集合,过滤条件既可以是正向查找也可以是反向查找
ge:

8、F查询和Q查询
1、导入相应的模块:from django.db.models import F,Q
2、F查询主要是更新字段中的数据用:
格式:表名称.object.[filter(过滤条件)].update(表字段名=F("表字段名")+值)
注释:主要是对表字段中的数字进行操作的
eg:

3、Q查询主要是应对多个条件的查询,分别用& | ~ 操作符来作为多个条件之间的链接介质



2、方式2:建表时没有创建外键对应关系,插入记录的时候创建外键对应关系,即写对端对应的对象
1、需要先获取被绑定的对象,也就是说创建的外键需要绑定那个对象
2、然后在需要绑定外键的记录中将类中对应创建外键对象的值改为获取的对象

10、创建外键方法(多对多记录,第三张表绑定关系)
方式1:在建表的时候就已经创建好外键对应关系,因为是第三张表绑定关系,所以可以在任意第一张和第二张表中添加对应关系
通过ManyToManyField(第二张表名称)的方式来创建,
django自己创建的第三张表,三个字段分别为第三张表主键,第一张表主键,第二张表主键

通过add(第一张表记录1,第一张表记录2...)的方式向第三张表中添加字段

注释:首先需要得到第一张表中表多对多的记录对象,然后得到第二张表中多对多的记录对象,最后通过add的方式将两张表多对多记录添加到第三张表中(注意在那个类中添加多对多对象,就用那个表记录对象 添加多对多记录)
也可以通过添加列表的方式添加到第三张表中

方式2:在建表的时候没有创建外键对象,需要自己创建第三张表添加多对多的外键
每个字段中都添加一对多的对应关系,然后就可以django中看见第三张表就可以对其进行具体的操作了。
通过添加具体的id的方式来创建两个字段之间多对多的关系。

11、解除外键方法
1、方式1:正向删除(通过clear()的方式来解除外键关系,以及通过remover(对象)的方式来删除特定外键)

注释:先写出需要删除外键关系的表记录,然后再根据外键绑定对象来删除相应 的对应关系
2、方式2:反向删除()

注释:先写出非外键关系的表记录,然后根据book_set反向查找从而删除相应的对应关系
2 、将static文件夹放到应用下,最好是一个项目对应一个static的文件夹
3 、在setting里面设置引入静态文件的方式
STATIC_ROOT=(os.path.join(BASE_DIR,"appBook/static"), ) 添加上静态文件的路径,django才能找到
4、 在模板首行加上{% load staticfiles %} 相当于读取静态文件配置
5 、 引入文件: {% static 具体路径 %} 相当于引入静态文件
STATIC_URL = '/static/' #引用名
STATICFILES_DIRS = (os.path.join(BASE_DIR,"statics") ) #实际名 ,即实际文件夹的名字
#django对引用名和实际名进行映射,引用时,只能按照引用名来,不能按实际名去找
#<script src="/statics/jquery-3.1.1.js"></script>
#------error----不能直接用,必须用STATIC_URL = '/static/'这个别名引用
#<script src="/static/jquery-3.1.1.js"></script>
注意2:statics文件夹写在不同的app下,静态文件的调用,意思就是说当settings需要引入多个静态文件时,需要在每个静态文件前加入一个元素。
STATIC_URL = '/static/'
STATICFILES_DIRS=(('hello',os.path.join(BASE_DIR,"app01","statics")), )
#<script src="/static/hello/jquery-1.8.2.min.js"></script>
注意3:要想在网页模板中引入静态文件就必须先读取静态文件,然后才能引用,且是通过别名引用。
STATIC_URL = '/static/'
{% load staticfiles %}
# <script src={% static "jquery-1.8.2.min.js" %}></script>
django目录下的路由系统和视图函数的更多相关文章
- Django(二)路由系统、视图、模板
大纲 一.内容概要: 二.上节回顾 三.Django 视图–views 1.获取用户多个数据及文件上传 2.FBV 和 CBV 3.装饰器 四.Django模板补充 - Django模板语言循 ...
- django目录下的各文件
本文部分转载. 使用Python setup.py install命令从源代码安装完Django后,这些都会被拷贝到Python安装目录下的Lib/site-packages/django子目录中.之 ...
- Django 路由系统URL 视图views
一.Django URL (路由系统) URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表:你就是以这种方式告诉Djan ...
- Django框架----路由系统、视图和模板(简单介绍)
一.路由配置系统(urls) URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表: 你就是以这种方式告诉Django,对于这个URL ...
- django中路由系统和视图的对应关系(值的传递)-->主要内容(位置参数、关键字参数、额外参数、include分组[urls的分发]、命名分组、反向解析、APPEND_SLASH)
路由系统也就是 urls.py文件,视图就是 views.py文件 路由系统里面要注意的事项 urlpatterns中的元素按照书写顺序从上往下逐一匹配正则表达式,一旦匹配成功则不再继续. 若要从UR ...
- Django路由配置系统,视图函数
一.路由配置系统(URLconf) URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个 ...
- Django路由配置系统、视图函数
一.路由配置系统(URLconf) URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个 ...
- Django框架——基础之路由系统(urls.py)
1.URL路由系统前言 URL是Web服务的入口,用户通过浏览器发送过来的任何请求,都是发送到一个指定的URL地址,然后被响应. 在Django项目中编写路由,就是向外暴露我们接收哪些URL的请求,除 ...
- Django框架——基础之路由系统(urls.py)11111111
1.URL路由系统前言 URL是Web服务的入口,用户通过浏览器发送过来的任何请求,都是发送到一个指定的URL地址,然后被响应. 在Django项目中编写路由,就是向外暴露我们接收哪些URL的请求,除 ...
随机推荐
- C语言中fgetc函数返回值为什么是int?
学习C语言的,文件操作,大都会用到它. 它的函数原型: 这个函数的返回值,是返回读取的一个字节.如果读到文件末尾返回EOF.EOF其实就是一个宏#define EOF (-1)表示-1.既然返回的是一 ...
- javascript (function() { /* code */ })() 自执行函数
(function(){ function a(){ alert("a"); } })(); 自执行匿名函数: 常见格式:(function() { /* code */ })() ...
- 第八章 springboot + mybatis + 多数据源2(解决循环引用)
解决了循环引用 1.application.properties #the first datasource jdbc.names:1,2 jdbc1.driverClassName = com.my ...
- 彻底解决maven Cannot change version of project facet Dynamic Web Module to 3.0?
这个问题是由于maven默认的jdk和默认的Dynamic Web Module版本问题引起的. 这个问题断断续续解决了复发了,今天找打了一个方法 第一,首先要在maven中配置这个插件 <pl ...
- php或js判断网站访问者来自手机或者pc端源码
很多时候也可以通过逻辑程序来进行判断,如PHP.JS是常用的两种识别访问设备类型的常用方法. 原理都是采用识别访问客户端的HTTP_USER_AGENT,然后进行关键字匹配进行确定设备类型,对于伪造H ...
- Eclipse下快速打开本地文件插件EasyExplorer
EasyExplorer 是一个类似于 Windows Explorer的Eclipse插件,它可以帮助你在不退出Eclipse的环境下浏览本地文件系统,类似的插件也有很多,但是本人喜欢使用这个版本 ...
- 我的第7个java程序--把java web项目改为java project项目--mybatis
连接数据库需要 程序,连接字符串,查询语句 主程序->读取连接字符串->读取查询语句->把查询到的值赋值给映射对象->打印对象属性 java project的好处,不用做那么多 ...
- 利用微信小程序实现web监控界面
1.实现思路 利用小程序去调用公司zabbix的接口获取网站监控数据并展示出来. 2.准备阶段 1.小程序公众号 2.企业号 3.zabbix接口 3.实现过程
- JAVA中BufferedReader设置编码的必要性
实验环境 Myeclipse 默认编码 UTF-8 先看两种读文件的方式: 方式一: InputStreamReader fReader = new InputStreamReader(new Fil ...
- 多线程编程中的join函数
# coding: utf-8 # 测试多线程中join的功能 import threading, time def doWaiting(): print 'start waiting1: ' + t ...