<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 管理文件 # 這篇文檔描述了Django為那些用戶上傳文件準備的文件訪問API。底層的API足夠通用,你可以使用為其它目的來使用它們。如果你想要處理靜態文件(JS,CSS,以及其他),參見[管理靜態文件(CSS和圖像)](http://python.usyiyi.cn/django/howto/static-files/index.html)。 通常,Django使用`MEDIA_ROOT `和 `MEDIA_URL`設置在本地儲存文件。下面的例子假設你使用這些默認值。 然而,Django提供了一些方法來編寫自定義的 [文件儲存系統](http://python.usyiyi.cn/django/topics/files.html#file-storage),允許你完全自定義Django在哪里以及如何儲存文件。這篇文檔的另一部分描述了這些儲存系統如何工作。 ## 在模型中使用文件 ## 當你使用`FileField` 或者 `ImageField`的時候,Django為你提供了一系列的API用來處理文件。 考慮下面的模型,它使用`ImageField`來儲存一張照片: ``` from django.db import models class Car(models.Model): name = models.CharField(max_length=255) price = models.DecimalField(max_digits=5, decimal_places=2) photo = models.ImageField(upload_to='cars') ``` 任何`Car`的實例都有一個 `photo`字段,你可以通過它來獲取附加圖片的詳細信息: ``` >>> car = Car.objects.get(name="57 Chevy") >>> car.photo <ImageFieldFile: chevy.jpg> >>> car.photo.name 'cars/chevy.jpg' >>> car.photo.path '/media/cars/chevy.jpg' >>> car.photo.url 'http://media.example.com/cars/chevy.jpg' ``` 例子中的`car.photo` 對象是一個`File` 對象,這意味著它擁有下面描述的所有方法和屬性。 > 注意 > > 文件保存是數據庫模型保存的一部分,所以磁盤上真實的文件名在模型保存之前并不可靠。 例如,你可以通過設置文件的 `name`屬性為一個和文件儲存位置 (`MEDIA_ROOT`,如果你使用默認的`FileSystemStorage`)相關的路徑,來修改文件名稱。 ``` >>> import os >>> from django.conf import settings >>> initial_path = car.photo.path >>> car.photo.name = 'cars/chevy_ii.jpg' >>> new_path = settings.MEDIA_ROOT + car.photo.name >>> # Move the file on the filesystem >>> os.rename(initial_path, new_path) >>> car.save() >>> car.photo.path '/media/cars/chevy_ii.jpg' >>> car.photo.path == new_path True ``` ## File ## 當Django需要表示一個文件的時候,它在內部使用`django.core.files.File`實例。這個對象是 Python [內建文件對象](https://docs.python.org/library/stdtypes.html#bltin-file-objects)的一個簡單封裝,并帶有一些Django特定的附加功能。 大多數情況你可以簡單地使用Django提供給你的`File`對象(例如像上面那樣把文件附加到模型,或者是上傳的文件)。 如果你需要自行構造一個`File`對象,最簡單的方法是使用Python內建的`file` 對象來創建一個: ``` >>> from django.core.files import File # Create a Python file object using open() >>> f = open('/tmp/hello.world', 'w') >>> myfile = File(f) ``` 現在你可以使用 `File`類的任何文檔中記錄的屬性和方法了。 注意這種方法創建的文件并不會自動關閉。以下步驟可以用于自動關閉文件: ``` >>> from django.core.files import File # Create a Python file object using open() and the with statement >>> with open('/tmp/hello.world', 'w') as f: ... myfile = File(f) ... myfile.write('Hello World') ... >>> myfile.closed True >>> f.closed True ``` 在處理大量對象的循環中訪問文件字段時,關閉文件極其重要。如果文件在訪問之后沒有手動關閉,會有消耗完文件描述符的風險。這可能導致如下錯誤: ``` IOError: [Errno 24] Too many open files ``` ## 文件儲存 ## 在背后,Django需要決定在哪里以及如何將文件儲存到文件系統。這是一個對象,它實際上理解一些東西,比如文件系統,打開和讀取文件,以及其他。 Django的默認文件儲存由`DEFAULT_FILE_STORAGE`設置提供。如果你沒有顯式提供一個儲存系統,就會使用它。 關于內建的默認文件儲存系統的細節,請參見下面一節。另外,關于編寫你自己的文件儲存系統的一些信息,請見[編寫自定義的文件系統](http://python.usyiyi.cn/django/howto/custom-file-storage.html)。 ### 儲存對象 ### 大多數情況你可能并不想使用`File`對象(它向文件提供適當的存儲功能),你可以直接使用文件儲存系統。你可以創建一些自定義文件儲存類的實例,或者 – 大多數情況更加有用的 – 你可以使用全局的默認儲存系統: ``` >>> from django.core.files.storage import default_storage >>> from django.core.files.base import ContentFile >>> path = default_storage.save('/path/to/file', ContentFile('new content')) >>> path '/path/to/file' >>> default_storage.size(path) 11 >>> default_storage.open(path).read() 'new content' >>> default_storage.delete(path) >>> default_storage.exists(path) False ``` 關于文件儲存API,參見 [文件儲存API](http://python.usyiyi.cn/django/ref/files/storage.html)。 ### 內建的文件系統儲存類 ### Django自帶了`django.core.files.storage.FileSystemStorage` 類,它實現了基本的本地文件系統中的文件儲存。 例如,下面的代碼會在 `/media/photos` 目錄下儲存上傳的文件,無論`MEDIA_ROOT`設置是什么: ``` from django.db import models from django.core.files.storage import FileSystemStorage fs = FileSystemStorage(location='/media/photos') class Car(models.Model): ... photo = models.ImageField(storage=fs) ``` [自定義儲存系統](http://python.usyiyi.cn/django/howto/custom-file-storage.html) 以相同方式工作:你可以把它們作為`storage`參數傳遞給`FileField`。 > 譯者:[Django 文檔協作翻譯小組](http://python.usyiyi.cn/django/index.html),原文:[Managing files](https://docs.djangoproject.com/en/1.8/topics/files/)。 > > 本文以 [CC BY-NC-SA 3.0](http://creativecommons.org/licenses/by-nc-sa/3.0/cn/) 協議發布,轉載請保留作者署名和文章出處。 > > [Django 文檔協作翻譯小組](http://python.usyiyi.cn/django/index.html)人手緊缺,有興趣的朋友可以加入我們,完全公益性質。交流群:467338606。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看