1 urlencoded---->传普通的数据,form表单默认就是这种---->request.POST 2 form-data-----》传文件和数据 ---->request.POST request.FILES 3 json----------》传json格式数据 ---->request.body中取出来自行处理 def index(request): # 接收urlencoded编码 body体中:name=lili&age=18 # print(request.POST) # 接收form-data编码 body体中:分两部分,一部分是数据,一部分是文件 数据部分:name=lili&age=18 ---asdfasdfasdfgasgasgd--- 文件部分(二进制) #数据部分 # print(request.POST) # #文件部分 # print(request.FILES) # 接收json格式 body体中 { "name": "lili", "age": 18 } # 这里没有 print(request.POST) # 数据在这(自行处理) print(request.body) return HttpResponse('ok')
二、
# 方式一 return render(request,'time.html',context={'current_date':str(now),'title':'lqzNB'}) # 方式二(页面静态化,提高网站并发量) now=datetime.datetime.now() from day65 import settings import os path=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)
三、模板语法之变量
DTL:Django Template Language (django模板语言)
#views.py
1 模板中使用 {{python变量}} def index(request): num = 10 ss = 'lqz is handsome' b = False ll = [1, 2, 43] dic = {'name': 'lqz', 'age': 18} def test(): print('我是test') return 'test ---撒发射点' class Person(): def __init__(self, name): self.name = name def print_name(self): return self.name def __str__(self): return self.name p=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>
四、模板语法之深度查询句点符
# views.py
def index(request): num = 10 ss = 'lqz is handsome' b = False ll = [1, 2, 43, {'name': 'egon'}] dic = {'name': 'lqz', 'age': 18} def test(): print('我是test') return 'test ---撒发射点' class Person(): def __init__(self, name): self.name = name def print_name(self): return self.name def __str__(self): return self.name p = 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())
index.html
<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 }}
五、显示的是
# 这里是出现xss攻击的地方
# xss攻击:是什么,如何预防?django已经处理了xss攻击,它的处理原理是什么 from django.utils.safestring import mark_safe link1 = '<a href="https://www.baidu.com">点我<a>' <!--方式一:--> link2 = mark_safe(link1) <!--方式二:--> {link1|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>过滤器之safe:{{ link1|safe }}</p>
七、自定义过滤器
自定义过滤器 -第一步:在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag -第二步:在app中创建templatetags包(包名只能是templatetags,不能改) -第三步:在包内,新建py文件(如:my_tags.py) -第四步:写代码(过滤器) from django import template register = template.Library() @register.filter def my_upper(value): return value.upper() -第五步使用:(模板),先load,再使用 {% load my_tags %} {{ 'aa'|my_upper }}
八、标签
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=1 lqzisnbplus='lqz' # b=False b=True user_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>
九、
自定义标签 -第一步:在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag -第二步:在app中创建templatetags包(包名只能是templatetags,不能改) -第三步:在包内,新建py文件(如:my_tags.py) -第四步:写代码(过滤器) from django import template register = template.Library() @register.simple_tag def my_csrf(): import uuid res=uuid.uuid4() return mark_safe('<input type="hidden" name="csrfmiddlewaretoken" value="%s">'%res) -第五步使用:(模板),先load,再使用 {% load my_tags %} {% my_csrf %} {% my_tag 1 3 4 %}