您好,登錄后才能下訂單哦!
一、虛擬環境
1 用pychanrm創建--->files-->newproject--->選擇虛擬環境 2 settings-->project創建 3 用命令行創建,詳見https://www.cnblogs.com/liuqingzheng/p/9508851.html
二、django 2.0和django 1.0 路由層區別
(*****url,re_path分組分出來的數據,是字符串) -re_path:跟1.0的url用法相同 -path:傳的路徑,是準確路徑 -re_path ---->等于原來的url (re_path模塊) 5個轉換器-->path('test/<path:year>', views.re_test), str,匹配除了路徑分隔符(/)之外的非空字符串,這是默認的形式 int,匹配正整數,包含0。 slug,匹配字母、數字以及橫杠、下劃線組成的字符串。 uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。 path,匹配任何非空字符串,包含了路徑分隔符(/)(不能用?)
-自定義轉換器(django2.0)
print('%010d'%12) # 結果 :0000000012 (共10位,不足的用0補齊)
urls.py
# 1、定義一個類: # 自定義轉換器 class MyCon: # 寫一個正則表達式,名字必須命名為regex regex='[0-9]{4}' # 匹配出來的數據,會傳到這里,retrun回去的,會被視圖函數接收 def to_python(self,value): return int(value) # ××× # return value # 字符串類型 # 反向解析用的 def to_url(self,value): return "%04d" %value # 2 導入模塊 from django.urls import register_converter # 轉換器 register_converter register_converter(MyCon,'yyy') # 3 寫入表達式 urlpatterns = [ path('test/<yyy:year>',views.re_test), ]
views.py
def re_test(request,year): return HttpResponse('ok')
訪問:http://127.0.0.1:8000/test/2018
返回:ok
urls.py
from django.urls import path,re_path,register_converter from app01 import views class MyCon: regex='[0-9]{4}' def to_python(self,value): return value def to_url(self,value): return "%04d" %value register_converter(MyCon,'yyy') urlpatterns = [ path('test/<yyy:year>',views.re_test,name='test'), ]
views.py
from django.shortcuts import render,HttpResponse,reverse def re_test(request,year): url=reverse('test',args=(9,)) print(url) return HttpResponse('ok')
返回:/test/0009
三、APPEND_SLASH
settings.py
# 默認為True ,設置為False 后 http://127.0.0.1:8000/test 不會為test補全后面的'/',打開網頁后會成為404(若沒有這個頁面的話) APPEND_SLASH=False
四、視圖層之http request對像
# request屬性 # https://www.cnblogs.com/liuqingzheng/articles/9509801.html # def test(request): # print(type(request)) # 前臺Post傳過來的數據,包裝到POST字典中 # request.POST # 前臺瀏覽器窗口里攜帶的數據,包裝到GET字典中 # request.GET # 前臺請求的方式 # request.method # post提交的數據,都存放在body體的內容 # request.body # 取出請求的路徑,取不到數據部分 # print(request.path) # 取出請求的路徑,能取到數據部分 # print(request.get_full_path()) # 請求頭里的數據(例如:請求地址,名字,以及從哪個地址訪問過來的) # print(request.META) # referer :是從哪個鏈接過來的 # post提交數據格式,放到body體中 # name=lqz&age=18&sex=1 # return HttpResponse("ok")
小點補充:調試斷點:
五、視圖層之HttpResponse
三件套:render,HttpResponse,redirect
# render(返回模板,html文件)
# HttpResponse:返回字符串
# redirect: 重定向
HttpResponse 內部原理
views.py
from django.shortcuts import render,HttpResponse from django.template import Template,Context def index(request): if request.method=="GET": temp = Template('<h2>{{ user }}</h2>') con = Context({'user': 's_jun'}) ret = temp.render(con) print(ret) return HttpResponse(ret)
urls.py
url(r'^index/', views.index)
六、視圖層之JsonResponse對象
# 返回給前臺的一個json格式,可以讓js代碼拿到,實現dom操作,這種叫做前后端分離。
# 使用 JsonResponse 返回給前臺一個json格式的字典,只支持字典,另外一種方式可以支持列表
views.py
from django.http import JsonResponse def index(request): import json dic={'name':'s_jun','age':20} # return HttpResponse(json.dumps(dic)) # 原理 return JsonResponse(dic)
支持列表的方式:views.py
def index(request): li = ['name','age'] return JsonResponse(li,safe=False)
訪問:http://127.0.0.1:8000/index/
七、fbv與cbv
-基于類的視圖
urls.py
url(r'^test/', views.Test.as_view()), # 自定義Test類,調用as_view的方法,叫做:綁定給類的方法
views.py
from django.views import View class Test(View): def get(self,request): # 一定要傳request對象 return HttpResponse('This is get-test') def post(self,request): return HttpResponse('This is post-test')
-基于函數的視圖
八、文件上傳
urls.py
url('^upload/', views.upload)
# 需要在根項目下創建一個img的目錄
views.py
def upload(request): if request.method=='GET': return render(request,'upload.html') if request.method=="POST": myfile=request.FILES.get('yyy') img="img/"+myfile.name # 打開文件,把上傳過來的文件存到本地 with open(img,'wb') as f : for line in myfile.chunks(): f.write(line) return HttpResponse('post ok')
upload.html
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>upload</title> </head> <body> <form action="" method="post" enctype="multipart/form-data"> <input type="file" name="yyy" > <p> 密碼:<input type="password" name="password"></p> <input type="submit" value="提交"> </form> </body> </html>
補充:*****編碼方式multipart/form-data或者:application/x-www-form-urlencoded傳的數據,都可以從POST中取出來
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。