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的请求,除 ...
随机推荐
- php画图应用之验证码
在画图里面,就像之前所说的.php的画图是真正动态画图,尽管自己承认会出的图是非常不好看的.但我们主要关注的应该还是数据处理. 验证码我们差点儿无处不见,它的产生和画图技术是密不可分的.事实上,简单的 ...
- Crypto++库安装、测试
项目中需要使用到C++加密解密库,选择了Crypto++这个开源库,于是先安装并写一个小例子试试 一.下载 网址:http://www.cryptopp.com/#download 二.打开项目 下载 ...
- c++ using Handle Class Pattern to accomplish implementation hiding
Reference material: Thinking In C++ 2nd eidition chapter 5 section "Handle classes" If the ...
- Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed
错误原因:常量.随机或者依赖时区的表达式不能作为分区函数. 解决方法:把ts列换成datetime类型,创建成功. CREATE TABLE T_log( id INT(11) NOT NULL AU ...
- AFNet3.0上传图片
很多iOS应用都会遇到需要上传图片的情况,比如修改个人资料时需要上传自己的头像,最近我也遇到了这种情况,首先参考之前写过的AFNetWorking3.0处理请求头和请求内容. 我们在上述博客的基础之上 ...
- linux USR1亦通常被用来告知应用程序重载配置文件
linux kill 命令 以及 USR1 信号 解释 原创 2016年03月16日 16:48:27 标签:linux kill -USR1 5325 最近 在做 服务器搭建的一些工作,其中 用到了 ...
- 算法之动态规划(最长递增子序列——LIS)
最长递增子序列是动态规划中最经典的问题之一,我们从讨论这个问题开始,循序渐进的了解动态规划的相关知识要点. 在一个已知的序列 {a1, a 2,...an}中,取出若干数组成新的序列{ai1, ai ...
- TP find() 查找
如果用了find()进行查找数据.那么那么获取到这条对象的则是用find查找出的这条对象. 如果: $obj=$this->where('id'=>$id)->find(); 那么可 ...
- Android 编程之入门开发目录管理器开发抽屉与文件分类-4
在此目录管理APP里,我们能够尝试引用一些新的元素.在这里我给打击介绍一个叫抽屉的布局,QQ就用到了抽屉布局.不 过他们又在原有的基础上自己开发了新的抽屉布局.而且还蛮高大上的,顺便说说分类管理.这些 ...
- python升级后pip 不可用 卸载pip
python版本由2.6升级到2.7之后,用pip提示报错 找了一下原因,网上的版本很多.弄来弄去比较麻烦 来点简单粗暴的 1.卸载pip yum remove python-pip 2.下载 cur ...