Django 視圖層
阿新 • • 發佈:2018-11-09
inux 瀏覽器 core type pre b- *** with open tex
1.虛擬環境配置
1 用pychanrm創建--->files-->newproject--->選擇虛擬環境
2 settings-->project創建
3 用命令行創建
安裝: pip3 install virtualenv 創建虛擬環境: (1)virtualenv env_django(創建虛擬環境) #env_django為虛擬環境名 (2)virtualenv --system-site-packages env_django(創建環境,繼承原安裝的模塊) 激活該虛擬環境: -windows進到目錄裏,的Script文件夾輸入:activate -linux:soruse env1/Script/activate 退出虛擬環境: -deactivate 在pycharm中使用虛擬環境 -files--settings--Project--Project Interpreter--add選擇虛擬環境路徑下的python.exe即可命令行創建代碼
創建項目時創建虛擬環境
已有項目使用虛擬環境
2.django 2.0和django 1.0 路由層區別(*****url,re_path分組分出來的數據,是字符串)
re_path(‘正則‘,視圖函數)
path傳的第一個參數,不是正則,準確的路徑,不支持正則
5個轉換器-->path(‘test/<int:year>‘, views.re_test),
str,匹配除了路徑分隔符(/)之外的非空字符串,這是默認的形式
int,匹配正整數,包含0。
slug,匹配字母、數字以及橫杠、下劃線組成的字符串。
uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
path,匹配任何非空字符串,包含了路徑分隔符(/)(不能用?)
3.自定義轉換器在urls中定義
在urls.py文件內的urlpatterns內寫入
4.視圖層之HttpRequest對象
def test(request): print(type(request)) from django.core.handlers.wsgi import WSGIRequest # 前臺Post傳過來的數據,包裝到POST字典中 request.POST # 前臺瀏覽器窗口裏攜帶的數據,包裝到GET字典中 request.GET # 前臺請求的方式request.method # post提交的數據,body體的內容 request.body # 取出請求的路徑,取不到數據部分 print(request.path) # 取出請求的路徑,能取到數據部分 print(request.get_full_path()) print(request.META) # post提交數據格式,放到body體中 # name=lqz&age=18&sex=1 return HttpResponse(‘ok‘)
5.視圖層之HttpResponse對象
三件套:render,HttpResponse,redirect
render函數:
def test(request): if request.method==‘GET‘: temp=Template(‘<h1>{{ user }}</h1>‘) con=Context({‘user‘:‘lqz‘}) ret=temp.render(con) print(ret) # return render(request,‘index.html‘) return HttpResponse(ret)
6.視圖層之JsonResponse對象
-導入:from django.http import JsonResponse #視圖函數中: def test(request): import json dic={‘name‘:‘lqz‘,‘age‘:18} ll = [‘name‘, ‘age‘] # 把字典轉換成json格式,返回到前臺 return HttpResponse(json.dumps(dic)) # 把列表轉換成json格式,返回到前臺 return HttpResponse(json.dumps(ll)) # 把字典轉換成json格式,返回到前臺 return JsonResponse(dic) # 報錯,默認不支持列表形式 return JsonResponse(ll) # 支持列表形式 return JsonResponse(ll,safe=False)
7.CBV和FBV
基於類的視圖(CBV)
from django.views import View class Test(View): def get(self, request): return HttpResponse(‘get-test‘) def post(self, request): return HttpResponse(‘post-test‘)
基於函數的視圖(FBV)
8.簡單文件上傳
<form action="" method="post" enctype="multipart/form-data">
{#<form action="" method="post" enctype="application/x-www-form-urlencoded">#} <input type="file" name="myfile"> <input type="text" name="password"> <input type="submit" value="提交"> </form>
def fileupload(request): if request.method==‘GET‘: return render(request,‘fileupload.html‘) if request.method==‘POST‘: # FILES print(request.FILES) print(type(request.FILES.get(‘myfile‘))) # 從字典裏根據名字,把文件取出來 myfile=request.FILES.get(‘myfile‘) from django.core.files.uploadedfile import InMemoryUploadedFile # 文件名字 name=myfile.name # 打開文件,把上傳過來的文件存到本地 with open(name,‘wb‘) as f: # for line in myfile.chunks(): #chunks為django內部封裝的方法該方法也可以拿到文件全部內容 for line in myfile: f.write(line) return HttpResponse(‘ok‘)
編碼方式multipart/form-data或者:application/x-www-form-urlencoded傳的數據,都可以從POST中取出來
Django 視圖層