1. 程式人生 > >django-form.errors和上傳文件

django-form.errors和上傳文件

files model col get 這一 login .get clean erro

  • 一.上傳文件:
    • 在相應的模型裏面定義`FileField`或者是`ImageField`類型的字段,並且1.設置好`upload_to`參數來指定上傳的路徑.
headshot = models.ImageField(u‘頭像‘, upload_to="upload/%Y/%m/%d") # 上傳的路徑,django自己創建路徑
  • 如果是使用ImageField,會需要安裝一個依賴Pillow, Pillow是專門做圖片處理的一個python包
pip install Pillow
  • 2.需要在`settings.py`文件中指定媒體路徑`MEDIA_ROOT`.
MEDIA_ROOT = "media/" ps: 這裏是媒體文件,它也是一種靜態文件,在django中,這一塊的內容是要跟其它靜態文件分開處理的
  • django 中的文件存儲分為兩種
    • 靜態文件存儲,一般是我們的JS、css、系統的圖片文件等
    • 媒體文件存儲,一般是用戶上傳的圖片、文件數據,或大的文件或視頻等等
  • 3.文件上傳需要在HTML代碼中的form表單中添加`enctype="multipart/form-data"`以及在views當中,使用`request.FILES`來接收文件.
form = LoginUserForm(request.POST, request.FILES
)
  • 文件只有在保存時才會處理,數據庫保存的是文件的路徑,不會保存文件本身.

  • 二.表單錯誤消息:
    • 表單驗證沒有通過後,表單會產生一個`errors`屬性,這個屬性包括所有的驗證錯誤信息。
    • 通過`form.errors`即可訪問。
    • 通過`form.erros.屬性名`訪問對應的錯誤
    • 通過`form.errors.as_json()`可以將錯誤消息轉換成json數據。
    • 自定義錯誤消息:在`Field`中添加一個`error_messages`的`dict`類型的參數,然後根據`屬性名`設置對應的`message`,例如以下代碼:
    • 必須要執行完is_valid函數,否則errors是不會包含錯誤
  • 表單自定義錯誤消息:
    • 在表單中,重寫方法`clean_field`(field是一個屬性名),可以自定義針對某一個`field`的驗證機制,如果出現錯誤
  • 如果某個`field`出現驗證錯誤,通過`add_error`方法給指定的field添加錯誤消息。
  • 直接拋出一個`raise ValidationError(message, code="屬性名")`就可以了。
  • 重寫`clean`方法會在先完成`django`默認的驗證後,再重新執行`clean`方法的驗證
  • 如果驗證完成成功了,則直接返回當前值
    def clean_password(self):
        password = self.cleaned_data.get(password,None)
        if len(password) < 6:
            raise forms.ValidationError(upassword at least 6 length,code=min_length)
        return password

django-form.errors和上傳文件