昨日回顾

1 视图层之请求对象-request.method-GET['name']='xxx'  (不能修改)-POST-is_ajax()-path-get_full_path()-FILES       字典-META         http请求中,大多数都是请求头-body           请求体,二进制,传文件,取会抛异常-request.COOKIES-request.session-request.user2 视图层之响应对象-本质都是HttpResponse()obj = HttpResponse('ok')obj[name]=lqz-四件套:JsonResponse3 cbv和fbv-路由配置:url('index',类名.as_view())-视图类class 类名(view):def get(self.request):passdef post(self.request):pass4 文件上传-前端:input      type=file      name=‘myfile’-前端:ajax,postman,其它语言-后端:myfile=request.FILES.get('myfile')打开一个空文件,一行一行写入空文件返回

今日内容

1 cbv本质

# 1 请来了,路由匹配成功执行 path('index/',views.Index.as_view()),执行views.Index.as_view()()
# 2 本质是执行as_view()内部有个闭包函数view()
# 3 本质是view()---》dispatch()
# 4 dispatch内部,根据请求的方法(get,post)---->执行视图类中的def get  def post详细:https://blog.csdn.net/gymaisyl/article/details/84346499

2 前后端交互编码方式

1 urlencoded---->传普通的数据,form表单默认就是这种--->request.POST
2 form-data-----》传文件和数据---->request.POST   request.FILES
3 json--------》传json格式数据---->request.body中取出来自行处理
def index(request):# 接收urlencoded编码body体中:name=lqz&age=18# print(request.POST)# 接收form-data编码body体中:分两部分,一部分是数据,一部分是文件数据部分:name=lqz&age=18---asdfasdfasdfgasgasgd---文件部分(二进制)#数据部分print(request.POST)# #文件部分print(request.FILES)# 接收json格式body体中 {"name": "lqz","age": 18}# 这里没有print(request.POST)# 数据在这(自行处理)print(request.body)return HttpResponse('ok')

4 django模版使用的两种方式

# 方式一
return render(request,'time.html',context={'current_date':str(now),'title':'lqzNB'})# 方式二(页面静态化,提高网站并发量)now=datetime.datetime.now()import ospath=os.path.join(settings.BASE_DIR,'templates','time.html')ss=open(path,'r',encoding='utf-8').read()t=Template(ss)c=Context({'current_date':str(now),'title':'lqzNB'})html=t.render(c)  # html是渲染后的字符串return HttpResponse(html)

5 模版语法之变量

DTL:Django Template Language

1 模板中使用 {{python变量}}############views.py
def index(request):num = 10ss = 'lqz is handsome'b = Falsell = [1, 2, 43]dic = {'name': 'lqz', 'age': 18}def test():print('我是test')return 'test ---撒发射点'class Person():def __init__(self, name):self.name = namedef print_name(self):return self.namedef __str__(self):return self.namep=Person('lqz')# return render(request, 'index.html',{'num':num,'ss':ss,'b':b})#locals() 把当前作用域下所有的变量,都传到context中return render(request, 'index.html',locals())
# index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>{{ss}}</title>
</head>
<body><h1>模板语法之变量</h1><p>数字:{{ num }}</p>
<p>字符串:{{ ss }}</p>
<p>布尔:{{ b }}</p>
<p>列表:{{ ll }}</p>
<p>字典:{{ dic }}</p>
<p>函数:{{ test }}</p>
<p>对象:{{ p }}</p></body>
</html>

6 模板语法之深度查询句点符

def index(request):num = 10ss = 'lqz is handsome'b = Falsell = [1, 2, 43, {'name': 'egon'}]dic = {'name': 'lqz', 'age': 18}def test():print('我是test')return 'test ---撒发射点'class Person():def __init__(self, name):self.name = namedef print_name(self):return self.namedef __str__(self):return self.namep = Person('lqz')link1 = '<a href="https://www.baidu.com">点我<a>'link2 = mark_safe(link1)input_1='<p>用户名:<input type="text" name="name"></p>'input_2=mark_safe(input_1)script_1='''<script>alert('你被攻击了')</script>'''script_2 =mark_safe(script_1)return render(request, 'index.html', locals())

<h2>模板语法之句点符的深度查询</h2>
<p>列表的第一个元素:{{ ll.1 }}</p>
<p>字典的name对应的值:{{ dic.name }}</p>
<p>列表的第三个元素的name对应的值:{{ ll.3.name }}</p>
<p>函数执行,直接写函数名即可:{{ test }}</p>
<p>函数如果有参数?不支持</p>
<p>对象调用方法: {{ p.print_name }}</p>
<p>对象调用属性: {{ p.name }}</p>
<hr>
<a href="https://www.baidu.com">点我</a>
<p>a标签的字符串: {{ link1 }}</p>
<p>a标签的字符串,显示成a标签: {{ link2 }}</p><p>用户名:<input type="text" name="name"></p>
<p>input标签:{{ input_1 }}</p>
<p>input标签,显示成标签:{{ input_2 }}</p><p>js原封不动显示:{{ script_1 }}</p>{{ script_2 }}

7 模板渲染成标签还是原封不动的字符串

# xss攻击:是什么,如何预防?django已经处理了xss攻击,它的处理原理是什么from django.utils.safestring import mark_safe
link1 = '<a href="https://www.baidu.com">点我<a>'
link2 = mark_safe(link1){link1|safe}

8 过滤器(default,length,filesizeformat,date,slice,truncatechars,safe)

1 {{参数1|过滤器名字:参数2}}
2 过滤器最多传两个值,最少一个值  {{'lqz is'|slice:'2:3'}}# 了解
<p>过滤器之转化成文件大小格式,filesizeformat:{{ num|filesizeformat }}</p>
lqz is handsome
<p>过滤器之切片,slice:{{ ss|slice:"7:11" }}</p>
第二个参数写0,1,2, 都是 ...,  最少从3开始
<p>过滤器之显示字符数,truncatechars:{{ ss|truncatechars:'30' }}</p>
<p>显示单词数truncatewords:{{ ss|truncatewords:'2' }}</p># 记住
<p>过滤器之日期时间,date:{{ ctime|date:'Y-m-d H:i:s' }}</p>
<p>过滤器之date:{{ ctime|date:'Y年m月d日-------H时i分s秒' }}</p><p>过滤器之safe(和views中的mark_safe方法一样):{{ link1|safe }}</p>
# 其他一堆

9 标签(for,for … empty,if,with,csrf_token)

1 {% 标签名 %}2 标签for  ,在标签for的内部一直有一个forloop对象,是个字典
counter0:从0开始,每循环一次加1
counter:从1开始,每循环一次加1
revcounter:从列表长度开始,每循环一次减一
first:判断是不是循环的第一个
last:判断是不是循环的最后一个
parentloop:父级forloop对象(for循环嵌套)
{'parentloop': {}, 'counter0': 0, 'counter': 1, 'revcounter': 6, 'revcounter0': 5, 'first': True, 'last': False}3 if标签4 with标签(了解)
5 csrf标签(了解)
# views.py
def index(request):ll=['lqz','egon','zs','ls','ww']# ll=[]dic={'name':'lqz','age':19}count=1lqzisnbplus='lqz'# b=Falseb=Trueuser_list=[{'name':'lqz','age':19},{'name':'egon','age':18},{'name':'张三','age':22},{'name':'李四','age':99},{'name':'asdfasdf','age':18},{'name':'暗室逢灯n','age':18}]return render(request, 'index.html', locals())
#index.html
<h1>模板语法之标签</h1><h2>for的用法</h2>
{% for l in ll %}{#    <p>{{ l }}</p>#}<p><a href="http://127.0.0.1:8080/{{ l }}">{{ l }}</a></p>
{% endfor %}<hr>
{% for k,v in dic.items %}<p>key值为:{{ k }},value值为{{ v }}</p>
{% endfor %}<table border="1"><tr><td>id号</td><td>用户名</td><td>年龄</td></tr>{% for dic in user_list %}<tr><td>{{ forloop.counter }}</td><td>{{ dic.name }}</td><td>{{ dic.age }}</td></tr>{% endfor %}</table><hr>
<h2>for ----empty的用法</h2>
<ul>{% for l in ll %}<li>{{ l }}</li>{% empty %}<li>没有数据</li>{% endfor %}
</ul><h2>forloop对象</h2>
{% for dic in user_list %}{% for key,value in dic.items %}{{ forloop.parentloop.counter }}<p>{{ key }}:{{ value }}</p>{% endfor %}{% endfor %}<h2>if</h2>{% if b %}<p>b是true的</p>
{% else %}<p>b是false的</p>
{% endif %}<h2>with重命名</h2>{% with forloop.parentloop.counter as aaa %}{{ aaa }}
{% endwith %}{% with lqzisnbplus as a %}
{{ a }}
----{{ lqzisnbplus }}{% endwith %}<h2>csrf</h2>{% csrf_token %}
<input type="text" name="csrfmiddlewaretoken" value="uC35XuP1J2Va74ArYiNw4TMZ0PaZ6V4qvVGCsUQcqiKF5Sr8IrWS0rzpmOmPBrjY">
</body>

拓展

1 http响应头响应头

content-type:text/html; charset=utf-8   # 返回数据的编码类型

2 http请求头,请求编码格式

urlencoded
form-data
jason

3 易混的点

xss攻击
csrf攻击
cors:跨域资源共享,跟上面一毛钱关系都没有

作业

1 django设置响应头   name=lqz(如何设置)2 写一个装饰器,用在视图函数上,不管前端用什么编码方式传数据,数据部分都从request.data中取3 xss是什么?django已经处理了xss攻击,它的处理原理是什么4 模板语法通过for和if渲染表格,如果是第一行,显示红色,最后一行显示绿色5 csrf攻击是什么,如何防范(django也处理了)6 讲的内容整理成博客7 在第四个的基础上,显示用户浏览日志的功能,如果是第一行,显示红色,最后一行显示绿色

132 django模版文件的使用相关推荐

  1. Django模版(三)

    Django模版(三) 文章目录 Django模版(三) 一.图片验证码 1.验证码 2.手动实现验证码 3.调用验证码 4.验证 5.点击"看不清,换一个",换一个新的验证码 二 ...

  2. Django模版(二)

    Django模版(二) 文章目录 Django模版(二) 一.模板继承 1.父模板 2.子模板 3.示例 二.HTML转义 1.示例 2.关闭转义 3.字符串字面值 三.CSRF 1.简介 2.示例 ...

  3. Django模版(一)

    Django模版(一) 文章目录 Django模版(一) 一.模版 1.简介 2.模板包含两部分: 3.模板文件的使用 4.Django处理模板分为两个阶段: 5.模板文件加载顺序 6.创建示例项目 ...

  4. day80 django模版学习

    一.模版简介 DTL:django模版语言 核心: 变量 {{}} 标签 {% %} 二.模版语法之变量 变量渲染:{{变量}} 变量深度查询:{{变量.索引/key值/方法}} 三.模版之过滤器 变 ...

  5. Django静态文件处理、中间件及Admin站点

    Django静态文件处理.中间件及Admin站点 文章目录 Django静态文件处理.中间件及Admin站点 一.静态文件 1.简介 2.示例 3.配置静态文件 二.中间件 1.简介 2.示例 3.异 ...

  6. 解决Django静态文件配置pycharm高光问题

    就困扰了我半天的Django静态文件配置问题 更改了setting 文件后 文件参考问题总会高亮让然觉得又错误怪怪的 所以索性直接眼不见心不烦 具体操作如下图: 就这样就可以啦 大功告成! 也顺便提一 ...

  7. django 1.8 官方文档翻译:4-2-1 Django模版语言

    Django模版语言 本文将介绍Django模版系统的语法.如果您需要更多该系统如何工作的技术细节,以及希望扩展它,请浏览 The Django template language: for Pyth ...

  8. Django 静态文件处理

    Django 静态文件处理 前言 配置 staticfiles STATIC_URL STATICFILES_DIRS STATIC_ROOT 前言 Django的静态文件不能像html那样直接放上图 ...

  9. 【Django下载文件-Kml文件下载】

    Django下载文件系列 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 第一章 开发应该了解的Web文件下载 第二章 Django下载文件-三种方法 第三章 Django下载文件- ...

  10. Django实现文件分享系统

    Django实现文件分享系统 一.效果展示 文件上传和展示: 文件搜索: 文件下载: 删除文件: 二.关键代码 #urls.py from django.urls import path,re_pat ...

最新文章

  1. 一文详解循环神经网络的基本概念(代码版)
  2. margin:0 auto;不能居中的原因
  3. android布局layout,Android布局(FrameLayout、GridLayout)
  4. layui 传递前端请求_layui弹出层如何传值?
  5. yarn install node-sass(gulp-sass) 安装失败解决方案
  6. Linux系统下配置JDK环境变量
  7. layui表单元素的radio单选框问题
  8. [转] 浅谈 C++ 中的 new/delete 和 new[]/delete[]
  9. Longest Common Substring($LCS$)
  10. 目录-管壳式换热器的分析与计算
  11. 路由器的两个端口接在同一个交换机上_2个路由器怎么连接?
  12. 命令 / Linux / apt remove 和 apt purge 的区别
  13. 百度UEditor编译器中获取HTML内容和纯文本,设置UEditor编辑器的内容
  14. Surface Pro 3 的 USB 和蓝牙设备无法使用的处理方法
  15. 买服务器为何选择华为云?
  16. 029. 露从今夜白,月是故乡明
  17. 网络:应用层相关协议
  18. One-Hot 独热编码
  19. Python 爬取 百度地图搜索结果
  20. 基于Python实现制作的接金币小游戏

热门文章

  1. NMOS和PMOS详解以及电路设计
  2. K Simple question (第十届山东理工大学ACM网络编程擂台赛 正式赛)
  3. 微信小程序http模块和接口model模块
  4. 工业相机基本参数以及选型
  5. C++:Sqlite调用之增、读、改
  6. RT-Thread Studio中使用DHT11软件包
  7. Linux删除其中一行的快捷键,Linux 命令快捷键
  8. 生信识图 之 点图进阶-2(PCA)
  9. jsp+ssm+mysql实现图书馆预约占座管理系统 代码+数据库脚本+论文+答辩稿+开题报告+任务书
  10. 安卓微信支付回调出现白页面