django中ImageField的使用詳解
ImageField的使用筆記
今天完善作業(yè)寫的訂單系統(tǒng),主要是給每一個(gè)菜品增加圖片,看起來美觀一些,但是沒想到這個(gè)小小的需求花了我一天時(shí)間,記錄下來,算增長知識了。
使用流程
1.配置setting文件
MEDIA_ROOT代表的是上傳圖片的根目錄,MEDIA_URL代表的是訪問文件時(shí)url的前綴。
# 圖片儲存根路徑
MEDIA_ROOT = join('media')
# 圖片訪問url
MEDIA_URL = '/IMG/'
2.model里面增加ImageField屬性
up_load一定要配置,代表你最后的圖片會存儲到MEDIA_ROOT/up_load(實(shí)際上是你賦予的名稱)這個(gè)文件夾中。
class Menu(models.Model):
"""
餐品數(shù)據(jù)庫
"""
ID = models.BigAutoField(primary_key=True,editable=False)
lastEditTime = models.DateTimeField(auto_now_add=True)
merchantID = models.ForeignKey(Usr, verbose_name="商家賬號", on_delete=models.CASCADE,to_field='ID')
itemName = models.CharField(max_length=20,verbose_name="餐品名")
itemText = models.TextField(verbose_name="餐品簡介")
price = models.FloatField(verbose_name="餐品價(jià)格")
################# up_load代表你上傳圖片所存儲的文件夾名字
picture = models.ImageField(verbose_name='餐品圖片',null=True,upload_to='img/')
class Meta:
db_table = "Menu"
verbose_name = "餐品數(shù)據(jù)表"
ordering=['-lastEditTime']
3.Form表單類
本項(xiàng)目使用的是django自帶的Form表單類進(jìn)行數(shù)據(jù)的傳遞。
class MerchantDish(forms.Form): """ 商家菜品提交表單 """ itemName = forms.CharField(max_length=20,label="餐品名") itemText = forms.CharField(max_length=300,label="餐品簡介") price = forms.FloatField(label="餐品價(jià)格") picture = forms.ImageField(label='餐品圖片')
4.html模板文件(增加菜品)
注意一定要添加:enctype=“multipart/form-data”。
<form action="updateDish_post/" method="post" enctype="multipart/form-data">
{% csrf_token %} {{form.as_p}}
<button type="submit">修改</button>
<button type="button"><a href="/MerchantSystem/DelDish/{{dishID}}/" rel="external nofollow" >刪除</a></button>
</form>
5.顯示菜品的html模板文件
重要的是src中路徑的配置,有兩種方法,建議法一,自己感覺比較安全,就算沒有picture時(shí)也不會報(bào)錯。(注意:可調(diào)整圖片顯示大?。?br />
法一:/IMG(你自己定義的MEDIA_URL)/{{dish.picture}} ----dish代表后端傳來的菜品,dish.picture代表你使用的這個(gè)類中的那個(gè)有ImageField屬性的字段;
法二:{{dish.picture.url}} 因?yàn)镮mageField是文件類,里面有三個(gè)屬性name、path、url可以直接訪問。
{% for dish in menu %}
<!--將目錄的數(shù)據(jù)展示在html中-->
<!-- 提交到一個(gè)含參數(shù)的url注意后端的接收 -->
<form action="/MerchantSystem/Dish/{{dish.ID}}/" method="post">
{% csrf_token %}
<li class="media">
<div class="media-left media-middle" >
<img class="media-object" width="150" height="150" src="/IMG/{{dish.picture}}" alt="">
</div>
<div class="media-body">
<h4 class="media-heading">
<button type='submit' class=" url" title="更新菜品信息">
菜名:{{dish.itemName|default:"Null"}}
</button>
<span class="label label-default">
價(jià)格:{{dish.price|default:"Null"}}
</span>
</h4>
簡介:{{dish.itemText|default:"Null"}}
</div>
</li>
</form>
{% empty %}
<!--若中無數(shù)據(jù)展示如下內(nèi)容-->
<p>暫無數(shù)據(jù)..</p>
{% endfor %} {% endblock tableBody %}
6.路徑靜態(tài)化
在所有的url中都要配置如下:urlpatterns + static…
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('', views.base_view, name = "base"),# 顧客服務(wù)系統(tǒng)
path('order/<int:dishID>/', views.order_view),# 訂單詳情
path('order/<int:dishID>/submit/',views.order_submit),# 提交訂單
path('pay/<int:orderID>/', views.pay_view),# 繳費(fèi)
path('pay/<int:orderID>/submit/',views.pay_submit),#確認(rèn)賬單
path('order/list/',views.order_list_view),#歷史訂單列表
path('order/confirm/<int:orderID>/',views.order_confirm),#訂單確認(rèn)收到
path('order/comment/<int:orderID>/',views.comment),#到達(dá)相應(yīng)菜品的評論界面
path('order/comment_post/<int:orderID>/',views.comment_post)#提交評論
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
7.修改上傳的圖片
首先用form表單上傳圖片,檢查有效之后,把cleaned_data中的picture數(shù)據(jù)賦值給要更新對象中的picture屬性,最后save即可。代碼如下:
def updateDish_post(request,dishID):
"""
接受修改菜品的請求
"""
dish_form = MerchantDish(request.POST,request.FILES)
if dish_form.is_valid() :
dish = Menu.objects.get(ID = dishID)
dish.itemName = dish_form.cleaned_data['itemName']
dish.itemText = dish_form.cleaned_data['itemText']
dish.price = dish_form.cleaned_data['price']
dish.picture = dish_form.cleaned_data['picture']
dish.save()
# dishChange = dish_form.clean()
return redirect('/MerchantSystem/')
elif dish_form.errors is not None:
print(dish_form.errors)
return HttpResponse(str(dish_form.errors))
8.設(shè)置默認(rèn)圖片
這個(gè)步驟我查了好久的資料,但是都不行,好像不可以直接在model.py文件中設(shè)置default,我最后都快放棄了,但是自己還是憑運(yùn)氣試出來了,不知道原理,但還是放在這,希望對大家有幫助。
方法是在顯示圖片的html模板中的src處寫一個(gè)default,代碼如下:
dish是后端傳過來的參數(shù),default指向的是默認(rèn)圖片所在的位置。
<div class="media-left media-middle" >
<!-- {{dish.url|default:"Null"}} -->
<img class="media-object" width="150" height="150" src="/IMG/{{dish.picture|default:'img/default.jpg'}}" alt="">
</div>
參考資料:
到此這篇關(guān)于django中ImageField的使用詳解的文章就介紹到這了,更多相關(guān)django ImageField 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Django url 路由匹配過程詳解
- python基于爬蟲+django,打造個(gè)性化API接口
- 詳解Django關(guān)于StreamingHttpResponse與FileResponse文件下載的最優(yōu)方法
- Django 實(shí)現(xiàn)圖片上傳和下載功能
- Django前后端分離csrf token獲取方式
- Django用內(nèi)置方法實(shí)現(xiàn)簡單搜索功能的方法
- 用ldap作為django后端用戶登錄驗(yàn)證的實(shí)現(xiàn)
- 詳解Django自定義圖片和文件上傳路徑(upload_to)的2種方式
- Django數(shù)據(jù)統(tǒng)計(jì)功能count()的使用
- Django REST Framework 分頁(Pagination)詳解
- 如何用Django處理gzip數(shù)據(jù)流
相關(guān)文章
Django項(xiàng)目使用CircleCI的方法示例
這篇文章主要介紹了Django項(xiàng)目使用CircleCI的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07
淺談Python數(shù)學(xué)建模之線性規(guī)劃
線性規(guī)劃是運(yùn)籌學(xué)中研究較早、發(fā)展較快、應(yīng)用廣泛、方法較成熟的一個(gè)重要分支,它是輔助人們進(jìn)行科學(xué)管理的一種數(shù)學(xué)方法。研究線性約束條件下線性目標(biāo)函數(shù)的極值問題的數(shù)學(xué)理論和方法2021-06-06
Sklearn調(diào)優(yōu)之網(wǎng)格搜索與隨機(jī)搜索原理詳細(xì)分析
這篇文章主要介紹了Sklearn調(diào)優(yōu)之網(wǎng)格搜索與隨機(jī)搜索原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-02-02
Pytorch 搭建分類回歸神經(jīng)網(wǎng)絡(luò)并用GPU進(jìn)行加速的例子
今天小編就為大家分享一篇Pytorch 搭建分類回歸神經(jīng)網(wǎng)絡(luò)并用GPU進(jìn)行加速的例子,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01
python+pytest接口自動化之日志管理模塊loguru簡介
python中有一個(gè)用起來非常簡便的第三方日志管理模塊--loguru,不僅可以避免logging的繁瑣配置,而且可以很簡單地避免在logging中多進(jìn)程多線程記錄日志時(shí)出現(xiàn)的問題,甚至還可以自定義控制臺輸出的日志顏色,接下來我們來學(xué)習(xí)怎么使用loguru模塊進(jìn)行日志管理2022-05-05
實(shí)現(xiàn)Python圖形界面框架TkInter寫GUI界面應(yīng)用簡介過程操作
TkInter是Python用于開發(fā)GUI界面的標(biāo)準(zhǔn)庫,如果你想快速開發(fā)一個(gè)帶有GUI界面的小工具(笑小程序),且又能同時(shí)在Linux、Windows、Mac上使用,TkInter天生支持跨平臺,天生具備穩(wěn)定性,我認(rèn)為它能滿足內(nèi)部工具的簡單需求2021-09-09
python pyautogui手動活動(模擬鼠標(biāo)鍵盤)自動化庫使用
這篇文章主要為大家介紹了python pyautogui手動活動(模擬鼠標(biāo)鍵盤)自動化庫使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01

