1. 程式人生 > >Django 視圖層

Django 視圖層

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 視圖層