最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

django中ImageField的使用詳解

 更新時(shí)間:2020年12月21日 09:15:56   作者:小爺湯少  
這篇文章主要介紹了django中ImageField的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

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>

參考資料:

ImageField的使用

默認(rèn)圖片的賦值(感覺方法不行)

到此這篇關(guān)于django中ImageField的使用詳解的文章就介紹到這了,更多相關(guān)django ImageField 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • pygame實(shí)現(xiàn)中文輸入框的示例

    pygame實(shí)現(xiàn)中文輸入框的示例

    本文主要介紹了pygame實(shí)現(xiàn)中文輸入框的示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 華為2019校招筆試題之處理字符串(python版)

    華為2019校招筆試題之處理字符串(python版)

    這篇文章主要為大家詳細(xì)介紹了華為2019校招筆試題之處理字符串,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Django項(xiàng)目使用CircleCI的方法示例

    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ī)劃

    淺談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ì)分析

    這篇文章主要介紹了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)行加速的例子

    今天小編就為大家分享一篇Pytorch 搭建分類回歸神經(jīng)網(wǎng)絡(luò)并用GPU進(jìn)行加速的例子,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python如何將模塊打包并發(fā)布

    Python如何將模塊打包并發(fā)布

    這篇文章主要介紹了Python如何將模塊打包并發(fā)布,幫助大家分享自己的模塊,感興趣的朋友可以了解下
    2020-08-08
  • python+pytest接口自動化之日志管理模塊loguru簡介

    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)用簡介過程操作

    實(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)鍵盤)自動化庫使用

    這篇文章主要為大家介紹了python pyautogui手動活動(模擬鼠標(biāo)鍵盤)自動化庫使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01

最新評論

英山县| 西乌| 赤峰市| 富宁县| 阳曲县| 奉贤区| 河源市| 富锦市| 黄浦区| 东光县| 印江| 崇信县| 淮安市| 乌兰浩特市| 临泽县| 永川市| 射洪县| 余江县| 壶关县| 贞丰县| 唐河县| 乌拉特前旗| 奇台县| 汕尾市| 太仆寺旗| 尼勒克县| 赞皇县| 汝城县| 信宜市| 咸丰县| 乐平市| 九龙城区| 许昌市| 十堰市| 博客| 花垣县| 彩票| 兴山县| 苏尼特左旗| 金沙县| 斗六市|