欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Django的基本運(yùn)用之Django垃圾分類詳解

 更新時(shí)間:2021年09月02日 08:26:58   作者:旭風(fēng)°  
大家都知道Django 是一個(gè)由 Python 編寫的一個(gè)開放源代碼的 Web 應(yīng)用框架。接下來(lái)通過(guò)本文給大家介紹Django的基本運(yùn)用之Django垃圾分類詳解,感興趣的朋友一起看看吧

title: 利用Django實(shí)現(xiàn)一個(gè)能與用戶交互的初級(jí)框架
author: Sun-Wind
date: September 1, 2021

Django實(shí)現(xiàn)基本的框架

  • 此框架的功能是搭建服務(wù)器,使得服務(wù)器和客戶端交互
  • 此框架可以接受客戶端的請(qǐng)求,并返回根據(jù)請(qǐng)求所得到的結(jié)果

這里列舉一個(gè)垃圾識(shí)別分類的例子

Django簡(jiǎn)介

Django 是一個(gè)由 Python 編寫的一個(gè)開放源代碼的 Web 應(yīng)用框架。
使用 Django,只要很少的代碼,Python 的程序開發(fā)人員就可以輕松地完成一個(gè)正式網(wǎng)站所需要的大部分內(nèi)容,并進(jìn)一步開發(fā)出全功能的 Web 服務(wù)

MVC模型

Django 本身基于 MVC 模型,即 Model(模型)+ View(視圖)+ Controller(控制器)設(shè)計(jì)模式,MVC 模式使后續(xù)對(duì)程序的修改和擴(kuò)展簡(jiǎn)化,并且使程序某一部分的重復(fù)利用成為可能。

MVT模型

Django 的 MTV 模式本質(zhì)上和 MVC 是一樣的,也是為了各組件間保持松耦合關(guān)系,只是定義上有些許不同,Django 的 MTV 分別是指:
M 表示模型(Model):編寫程序應(yīng)有的功能,負(fù)責(zé)業(yè)務(wù)對(duì)象與數(shù)據(jù)庫(kù)的映射(ORM)。
T 表示模板 (Template):負(fù)責(zé)如何把頁(yè)面(html)展示給用戶。
V 表示視圖(View):負(fù)責(zé)業(yè)務(wù)邏輯,并在適當(dāng)時(shí)候調(diào)用 Model和 Template。
除了以上三層之外,還需要一個(gè) URL 分發(fā)器,它的作用是將一個(gè)個(gè) URL 的頁(yè)面請(qǐng)求分發(fā)給不同的 View 處理,View 再調(diào)用相應(yīng)的 Model 和 Template,MTV 的響應(yīng)模式如下所示:
簡(jiǎn)易圖:

創(chuàng)建垃圾分類項(xiàng)目

注意:博主使用的是windows系統(tǒng),不同系統(tǒng)使用的指令不一樣
<django-admin startproject rub>

使用以上指令創(chuàng)建項(xiàng)目
此時(shí)Django會(huì)形成一個(gè)項(xiàng)目框架,以下會(huì)一一解釋說(shuō)明

  • rub:項(xiàng)目的容器
  • manage.py:作為一個(gè)實(shí)用的命令行工具,能夠讓你和項(xiàng)目進(jìn)行交互
  • init.py:此空文件告訴python是一個(gè)python包
  • asgi.py: ASGI兼容的web服務(wù)器入口,以便運(yùn)行項(xiàng)目
  • settings.py:該項(xiàng)目的配置,比如數(shù)據(jù)庫(kù)配置,訪問(wèn)配置,鏈接配置
  • urls.py:該項(xiàng)目的url(路由)聲明
  • wsgi.py: WSGI兼容的web服務(wù)器入口,以便運(yùn)行項(xiàng)目

運(yùn)行我們的項(xiàng)目

<py manage.py runserver 0.0.0.0:8000>
通過(guò)以上命令來(lái)運(yùn)行我們的項(xiàng)目
此命令需要在rub文件夾里命名
其中0.0.0.0能夠讓局域網(wǎng)的其他電腦訪問(wèn)到我們的網(wǎng)站,8000是端口號(hào),也可以改成其他端口號(hào),如果不寫端口號(hào)默認(rèn)是8000
此時(shí)命令行會(huì)生成對(duì)應(yīng)的本地服務(wù)器的http,訪問(wèn)后如下所示

如果無(wú)法訪問(wèn),請(qǐng)查看是否是端口占用的問(wèn)題,可以考慮更換一個(gè)端口號(hào)

悄悄說(shuō)一句,8000端口占用多半是酷狗音樂(lè)什么的[]( ̄▽ ̄)*

創(chuàng)建app

Django規(guī)定,如果要使用模型層,必須要?jiǎng)?chuàng)建一個(gè)app(雖然我們這個(gè)項(xiàng)目里面不用,但還是教一下)
<django-admin.py startapp app>
然后Django就會(huì)自動(dòng)生成app的框架
<py manage.py migrate> # 創(chuàng)建表結(jié)構(gòu)
< py manage.py makemigrations app> # 讓 Django 知道我們?cè)谖覀兊哪P陀幸恍┳兏?br /> <py manage.py migrate app> # 創(chuàng)建表結(jié)構(gòu)
運(yùn)行以上指令可以完成數(shù)據(jù)庫(kù)表單的創(chuàng)建
這里只是額外引入一下,實(shí)際上本項(xiàng)目實(shí)現(xiàn)比較簡(jiǎn)單,可以無(wú)需使用

配置路由

路由簡(jiǎn)單的來(lái)說(shuō)就是根據(jù)用戶請(qǐng)求的 URL 鏈接來(lái)判斷對(duì)應(yīng)的處理程序,并返回處理結(jié)果,也就是 URL 與 Django 的視圖建立映射關(guān)系。
我們?cè)趓ub的主路由中添加如下配置
<path('',include('app.urls')),>
利用include語(yǔ)句可以將app的路由映射進(jìn)來(lái),這樣我們直接配置app的路由即可
include指的是路由的分發(fā)
Django 項(xiàng)目里多個(gè)app目錄共用一個(gè) urls 容易造成混淆,后期維護(hù)也不方便。
使用路由分發(fā)(include),讓每個(gè)app目錄都單獨(dú)擁有自己的 urls。
在app的路由當(dāng)中加入如下的配置
< path('',views.index,name = 'index'),>
<path('upload1',views.upload1,name = 'upload1'),>

path方法

Django path() 可以接收四個(gè)參數(shù),分別是兩個(gè)必選參數(shù):route、view 和兩個(gè)可選參數(shù):kwargs、name。

  • route:字符串,表示URL規(guī)則,與之匹配的URL會(huì)執(zhí)行第二個(gè)參數(shù)view
  • view:用來(lái)執(zhí)行匹配的URL請(qǐng)求
  • kwargs:字典參數(shù)(通過(guò)此參數(shù)可以實(shí)現(xiàn)網(wǎng)頁(yè)變量的解析操作,后續(xù)會(huì)有解釋)
  • name:用來(lái)反向獲取URL

視圖層

在app的視圖層中加入如下代碼

def index(request):
    return render(request,'app/index.html')
def upload1(request):
    myfile = request.FILES.get('pic',None)
    if not myfile:
        return HttpResponse("沒有上傳的文件信息:")
    filename = str(time.time()) + "." + myfile.name.split('.').pop()#這里是對(duì)文件名進(jìn)行預(yù)處理操作,時(shí)間函數(shù)可以隨機(jī)化一個(gè)值,用str方法轉(zhuǎn)換為字符串,然后用split拆分后綴名,可以實(shí)現(xiàn)任意圖片形式的保存
    destination = open("./static/pic/" + filename,"wb+")#利用open函數(shù)和chunks流寫入static文件夾
    for chunk in myfile.chunks():      # 分塊寫入文件  
        destination.write(chunk) 
    destination.close()
    label = predict_img(path="static/pic/" + filename)#此處是垃圾分類識(shí)別函數(shù),因?yàn)楦?jìng)賽相關(guān),就不放出具體的識(shí)別代碼了,讀者可以參考相關(guān)資料自行補(bǔ)充此函數(shù)
    print(label)
    os.remove("./static/pic/"+filename)#這里刪除文件,防止用戶傳入文件占用內(nèi)存的問(wèn)題
    context = {}
    context['result'] = label # 將result變量對(duì)應(yīng)的鍵值設(shè)為lable,這樣可以讓html文件解析lable變量
    return render(request,'app/result.html',context)

接下來(lái)我們進(jìn)行逐一解讀
render(): 返回文本,第一個(gè)參數(shù)為 request,第二個(gè)參數(shù)為字符串(頁(yè)面名稱),第三個(gè)參數(shù)為字典(可選參數(shù),向頁(yè)面?zhèn)鬟f的參數(shù):鍵為頁(yè)面參數(shù)名,值為views參數(shù)名)。
簡(jiǎn)而言之就是根據(jù)路徑返回我們需要的頁(yè)面
注意這里要寫成app/index而不是rub/index,雖然index的網(wǎng)頁(yè)文件在rub的templates下創(chuàng)立
Request是一個(gè)對(duì)象,其屬性簡(jiǎn)述如下

  • path 請(qǐng)求頁(yè)面的全路徑,不包括域名—例如, "/hello/"。m
  • ethod 請(qǐng)求中使用的HTTP方法的字符串表示。全大寫表示。如
if request.method == 'GET':
    do_something()
elif request.method == 'POST':
    do_something_else()
  • FILES

包含所有上傳文件的類字典對(duì)象。FILES中的每個(gè)Key都是<input type="file" name="" />標(biāo)簽中name屬性的值. FILES中的每個(gè)value 同時(shí)也是一個(gè)標(biāo)準(zhǔn)Python字典對(duì)象,包含下面三個(gè)Keys:
filename: 上傳文件名,用Python字符串表示
content-type: 上傳文件的Content type
content: 上傳文件的原始內(nèi)容
注意:只有在請(qǐng)求方法是POST,并且請(qǐng)求頁(yè)面中

模板

模板是一個(gè)文本,用于分離文檔的表現(xiàn)形式和內(nèi)容
在rub目錄下建立templates文件夾,屆時(shí)Django在通過(guò)URL尋找時(shí)會(huì)直接在此文件夾中找到對(duì)應(yīng)的網(wǎng)頁(yè)文件,在template文件夾下新建一個(gè)app文件夾
建立的index.html文件如下

<!DOCTYPE html>
<html lang="cn">
<head>
    <meta charset="UTF-8">
    <title>垃圾分類管理</title>
</head>
<body>
      <h2>垃圾分類管理</h2>
      {% include 'app/upload.html' %}
</body>
</html>

{% include %} 標(biāo)簽允許在模板中包含其它的模板的內(nèi)容。
upload.html文件如下:

<!DOCTYPE html>
<html lang = "en">
<head>
    <meta charset = "UTF-8">
    <meta name = "viewport" content =  "width = device-width,initial-scale=1.0">
    <title>       Document    </title>
</head>
<body>
    <h2>文件上傳 </h2>
    <form action = "{% url  'upload1' %}"  method = "post"  enctype="multipart/form-data">
    {% csrf_token %}
    圖片序號(hào):<input type = "text" name = "title"/><br/><br/>
    請(qǐng)上傳需要識(shí)別的圖片:<input type = "file" name = "pic"/><br/><br>
    <input type = "submit" value = "上傳"/>
</form>
</body>
</html>

這里只講解一下csrf
csrf_token 用于form表單中,作用是跨站請(qǐng)求偽造保護(hù)。
如果不用{% csrf_token %}標(biāo)簽,在用 form 表單時(shí),要再次跳轉(zhuǎn)頁(yè)面會(huì)報(bào)403權(quán)限錯(cuò)誤。
用了{% csrf_token %}標(biāo)簽,在 form 表單提交數(shù)據(jù)時(shí),才會(huì)成功。
至于其他的就是html語(yǔ)言的學(xué)習(xí)了,這里只簡(jiǎn)要講解一下
在表單當(dāng)中,input標(biāo)簽后面跟對(duì)應(yīng)的type屬性,可以上傳相關(guān)的數(shù)據(jù)到后面的name鍵位當(dāng)中
{% url 'upload1' %}是反方向解析URL,這里會(huì)直接將我們輸入的信息提交到uoload1URL當(dāng)中,然后會(huì)激活對(duì)應(yīng)的視圖層,也就是說(shuō)我們提交的圖片最終會(huì)傳到upload1函數(shù)中.
我們?cè)谏衔漠?dāng)中提到的配置path路徑中的name就是這樣的作用,這里圖片上傳的name是'pic'對(duì)應(yīng)于我們?cè)谏衔姆椒ㄖ幸玫腇ILE.get中的參數(shù)
最后一個(gè)result界面

<html>
 <div>
 	<p>垃圾分類的結(jié)果是:{{ result }}</p>
 </div>
</html>

這里對(duì)應(yīng)視圖層當(dāng)中upload1方法,大家不妨轉(zhuǎn)到視圖層當(dāng)中再看一下upload1函數(shù)
最后其返回的是render方法,然后返回的是result界面
在這里{{result}}是在html'中定義的一個(gè)變量,我們通過(guò)render方法可以用lable文本來(lái)代替
最后實(shí)現(xiàn)的結(jié)果如圖所示

我們只需要上傳圖片,然后提交利用我們自己寫的垃圾分類識(shí)別代碼即可得到對(duì)應(yīng)的結(jié)果
這里我們提交上我們想要識(shí)別的圖片


結(jié)果

到此這篇關(guān)于Django的基本運(yùn)用之Django垃圾分類詳解的文章就介紹到這了,更多相關(guān)Django垃圾分類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python使用plt.boxplot() 參數(shù)繪制箱線圖

    Python使用plt.boxplot() 參數(shù)繪制箱線圖

    這篇文章主要介紹了Python使用plt.boxplot() 參數(shù)繪制箱線圖 ,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Python畫圖時(shí)如何調(diào)用本地字體

    Python畫圖時(shí)如何調(diào)用本地字體

    這篇文章主要為大家介紹在通過(guò)Python繪制圖畫時(shí)如何調(diào)用本地的字體,從而解決中文亂碼的問(wèn)題。感興趣的小伙伴快來(lái)跟隨小編學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • pytorch中tensor的合并與截取方法

    pytorch中tensor的合并與截取方法

    今天小編就為大家分享一篇pytorch中tensor的合并與截取方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • 用Python編寫一個(gè)簡(jiǎn)單的俄羅斯方塊游戲的教程

    用Python編寫一個(gè)簡(jiǎn)單的俄羅斯方塊游戲的教程

    這篇文章主要介紹了用Python編寫一個(gè)簡(jiǎn)單的俄羅斯方塊游戲的教程,編寫俄羅斯方塊幾乎是每門編程語(yǔ)言基礎(chǔ)學(xué)習(xí)后的必備實(shí)踐,需要的朋友可以參考下
    2015-04-04
  • Python抓取百度查詢結(jié)果的方法

    Python抓取百度查詢結(jié)果的方法

    這篇文章主要介紹了Python抓取百度查詢結(jié)果的方法,涉及Python正則匹配及字符串與URL操作的相關(guān)技巧,需要的朋友可以參考下
    2015-07-07
  • Python如何對(duì)圖像補(bǔ)全并分割成多塊補(bǔ)丁

    Python如何對(duì)圖像補(bǔ)全并分割成多塊補(bǔ)丁

    這篇文章主要介紹了Python如何對(duì)圖像補(bǔ)全并分割成多塊補(bǔ)丁,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 使用Python文件讀寫,自定義分隔符(custom delimiter)

    使用Python文件讀寫,自定義分隔符(custom delimiter)

    這篇文章主要介紹了使用Python文件讀寫,自定義分隔符(custom delimiter),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • 如何在Django中設(shè)置定時(shí)任務(wù)的方法示例

    如何在Django中設(shè)置定時(shí)任務(wù)的方法示例

    這篇文章主要介紹了如何在Django中設(shè)置定時(shí)任務(wù)的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Python實(shí)現(xiàn)動(dòng)態(tài)二維碼生成的示例代碼

    Python實(shí)現(xiàn)動(dòng)態(tài)二維碼生成的示例代碼

    這篇文章主要和大家分享兩個(gè)制作二維碼的Python庫(kù),可以生成普通的二維碼、圖片背景版二維碼、動(dòng)圖GIF版二維。文中的示例代碼講解詳細(xì),感興趣的可以學(xué)習(xí)一下
    2022-05-05
  • Python psutil模塊簡(jiǎn)單使用實(shí)例

    Python psutil模塊簡(jiǎn)單使用實(shí)例

    這篇文章主要介紹了Python psutil模塊簡(jiǎn)單使用實(shí)例,本文直接給出使用腳本,實(shí)現(xiàn)查看cpu的信息、查看內(nèi)存信息、查看系統(tǒng)啟動(dòng)時(shí)間、查看網(wǎng)卡信息等,需要的朋友可以參考下
    2015-04-04

最新評(píng)論