一、前后端互動編碼方式
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')
二、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_safe link1 = '<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>
七、標簽
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>
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/166830.html
標籤:其他
