一、前后端交互编码方式
1 urlencoded---->传普通的数据,form表单默认就是这种---->request.POST2 form-data-----》传文件和数据 ---->request.POST request.FILES3 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')
二、django模板使用的两种方式
# 方式一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_safelink1 = '<a href="https://www.baidu.com">点我<a>'<!--方式一:-->link2 = mark_safe(link1)<!--方式二:-->{link1|safe}
六、过滤器
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>过滤器之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开始,每循环一次加1counter:从1开始,每循环一次加1revcounter:从列表长度开始,每循环一次减一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 %}
原文转载:http://www.shaoqun.com/a/480991.html
心怡科技:https://www.ikjzd.com/w/1327
aeo:https://www.ikjzd.com/w/2356
盘古集团:https://www.ikjzd.com/w/1448
一、前后端交互编码方式1urlencoded---->传普通的数据,form表单默认就是这种---->request.POST2form-data-----》传文件和数据---->request.POSTrequest.FILES3json----------》传json格式数据---->request.body中取出来自行处理defindex(request):#接收ur
东西网:https://www.ikjzd.com/w/1238
csa认证:https://www.ikjzd.com/w/904
客户剖析表:https://www.ikjzd.com/tl/107376
1000块就买了你的品牌!亚马逊内部消息曝光:https://www.ikjzd.com/home/20280
Shopee买家退货退款?COD不取怎么办?:https://www.ikjzd.com/home/101090
No comments:
Post a Comment